Yii2 behaviors. Частина 1

349

Від автора: вітаю вас, друзі. Ми продовжуємо цикл статей, присвячених знайомству з фреймворком Yii2. У цій статті ми познайомимося з темою поводжень фреймворку — Yii2 behaviors, завдяки яким ми можемо розширювати функціональність нашого коду.

Часто ми стикаємося з тим, що нам необхідно використовувати схожий або навіть один і той же код в різних класах (controller). Відповідно, якщо цей код однаковий, то не хотілося б займатися копіпастом з одного класу в інший, хотілося б винести його і впроваджувати в наш код, тим самим уникаючи дублювання.

Для вирішення завдання Yii пропонує нам механізм поводжень (behaviors). Поведінки – це фактично функціонал, який дозволить нам використовувати деякий код в наших класах.

Класична задача, яка вже реалізована вбудованим поведінкою у фреймворку. Наприклад, при створенні або оновленні статті (сторінки, товару тощо) ми хотіли б записувати або оновлювати дату для шуканого матеріалу. Це зручно реалізується поведінкою TimestampBehavior, роботу з яким ми зараз і розглянемо.

Для подальшої роботи давайте створимо таблицю новин з мінімальним набором полів, серед яких нас в першу чергу цікавлять поля created_at і updated_at – саме в них будуть зберігатися мітки додавання та оновлення новин.

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 і згенеруємо необхідні компоненти – модель:

Yii2 behaviors. Частина 1

Потім CRUD:

Yii2 behaviors. Частина 1

Після цього перейдемо за адресою http://yii2/news і додамо новину.

Yii2 behaviors. Частина 1

Тут ми бачимо, крім поля для найменування новини, ще й поля її дати та оновлення. Мені такий варіант не дуже подобається, мені здається незручним постійно заповнювати ці поля. Хотілося б, щоб вони заповнювалися автоматично. Давайте спробуємо реалізувати це. Для початку відкриємо згенеровану фреймворком модель News і зробимо дані поля необов’язковими. У підсумку метод rules буде таким:

public function rules()
{
return [
[[‘title’], ‘required’],
[[‘created_at’, ‘updated_at’], ‘safe’],
[[‘title’], ‘string’, ‘max’ => 255],
];
}

Тепер відкриємо частина вистави news\_form.php і приберемо з форми або закомментіруем виведення зазначених полів.

Yii2 behaviors. Частина 1

Після цього у формі залишиться тільки одне поле.

Yii2 behaviors. Частина 1

Відмінно! Спробуємо додати новину.

Yii2 behaviors. Частина 1

Супер новина додана! Однак в якості дати і часу ми бачимо те, що прийнято називати dummy date. Як би записати в ці поля реальні дату і час? Це ми з вами дізнаємося в наступній статті.

Більше про фреймворку ви можете дізнатися з наших безкоштовних або платних уроків. Також створення найпростішого блогу на Yii2 можна подивитися в цьому циклі уроків.