От автора: приветствую вас, друзья. Мы продолжаем цикл статей, посвященных знакомству с фреймворком Yii2. В этой статье мы познакомимся с темой поведений фреймворка — Yii2 behaviors, благодаря которым мы можем расширять функциональность нашего кода.
Частенько мы сталкиваемся с тем, что нам необходимо использовать похожий или даже один и тот же код в различных классах (controller). Соответственно, коль этот код одинаков, то не хотелось бы заниматься копипастом из одного класса в другой, хотелось бы вынести его и внедрять в наш код, тем самым избегая дублирования.
Для решения задачи Yii предлагает нам механизм поведений (behaviors). Поведения – это фактически функционал, который позволит нам использовать некоторый код в наших классах.
Классическая задача, которая уже реализована встроенным поведением во фреймворке. К примеру, при создании или обновлении статьи (страницы, товара и т.п.) мы хотели бы записывать или обновлять дату для искомого материала. Это удобно реализуется поведением TimestampBehavior, работу с которым мы сейчас и рассмотрим.
Для дальнейшей работы давайте создадим таблицу новостей с минимальным набором полей, среди которых нас в первую очередь интересуют поля created_at и updated_at – именно в них будут храниться метки добавления и обновления новостей.
1 2 3 4 5 6 7 |
CREATE TABLE IF NOT EXISTS `news` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; |
Теперь откроем генератор кода Gii и сгенерируем необходимые компоненты – модель:
Затем CRUD:
После этого перейдем по адресу //yii2/news и добавим новость.
Здесь мы видим, кроме поля для наименования новости, еще и поля ее даты и обновления. Мне такой вариант не очень нравится, мне кажется неудобным постоянно заполнять эти поля. Хотелось бы, чтобы они заполнялись автоматически. Давайте попробуем реализовать это. Для начала откроем сгенерированную фреймворком модель News и сделаем данные поля необязательными. В итоге метод rules будет таким:
1 2 3 4 5 6 7 8 |
public function rules() { return [ [['title'], 'required'], [['created_at', 'updated_at'], 'safe'], [['title'], 'string', 'max' => 255], ]; } |
Теперь откроем часть представления news\_form.php и уберем из формы или закомментируем вывод указанных полей.
После этого в форме останется только одно поле.
Отлично! Попробуем добавить новость.
Супер, новость добавлена! Однако в качестве даты и времени мы видим то, что принято называть dummy date. Как бы записать в эти поля реальные дату и время? Это мы с вами узнаем в следующей статье.
Больше о фреймворке вы можете узнать из наших бесплатных или платных уроков. Также создание простейшего блога на Yii2 можно посмотреть в этом цикле уроков.