Yii2 beforeAction

614

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

В одній з попередніх статей ми з вами знайомилися з корисним методом beforeSave. Нагадаю, даний метод викликається перед методом save і може бути корисний нам в тих випадках, якщо ми хочемо виконати деякі дії перед записом даних у БД.

Метод сьогоднішньої статті — beforeAction — схожий на попередній і, думаю, ви вже здогадалися, в який саме момент виконується beforeAction… правильно, дана функція буде викликатися перед зверненням до будь-якого екшену.

Що це нам дає? Тут все вже залежить від розв’язуваних завдань. Я наведу в статті лише один приклад використання beforeAction, який повинен зробити зрозумілою суть функції. Для початку давайте напишемо цей метод в потрібному нам контролері.

public function beforeAction($action)
{
return parent::beforeAction($action);
}

У такому вигляді на вашому сайті нічого не повинно змінитися. Цим кодом ми просто перевантажили beforeAction і всередині нашого методу викликали батьківський. При цьому поки що нічого більше ми і не робимо. В якості параметра приймається $action, в якій зберігається об’єкт з масою корисних властивостей і не дуже. При бажанні можете роздрукувати даний об’єкт і вивчити його.

public function beforeAction($action)
{
var_dump($action); die;
return parent::beforeAction($action);
}

Серед іншого в цьому об’єкті є властивості actionMethod і id, в яких зберігається назва поточного екшену. Наприклад, для головної сторінки сайту вони будуть такими:

Yii2 beforeAction

Що це нам дає? Та те, що в залежності від сторінки (екшену) ми можемо виконати код або не виконувати його. І один з класичних прикладів, який показувався в попередній статті:

public function beforeAction($action)
{
if (in_array($action->id [‘index’])) {
$this->enableCsrfValidation = false;
}
return parent::beforeAction($action);
}

Зміст виконуваного коду наступний: якщо найменування дії, яка повинна бути зараз виконано, входить в масив перерахованих (у наведеному вище прикладі це тільки один index), тоді необхідно вимкнути перевірку CSRF-токена.

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