От автора: приветствую вас, друзья. Мы продолжаем цикл статей, посвященных знакомству с фреймворком Yii2. В этой статье мы познакомимся с темой Yii2 beforeAction. Данный метод пригодится вам в тех случаях, когда вы захотите выполнить некоторый код перед любым из действий.
В одной из предыдущих статей мы с вами знакомились с полезным методом beforeSave. Напомню, данный метод вызывается перед методом save и может быть полезен нам в тех случаях, если мы хотим выполнить некоторые действия перед записью данных в БД.
Метод сегодняшней статьи — beforeAction — похож на предыдущий и, полагаю, вы уже догадались, в какой именно момент выполняется beforeAction… правильно, данная функция будет вызываться перед обращением к любому экшену.
Что это нам дает? Здесь все уже зависит от решаемых вами задач. Я приведу в статье лишь один пример использования beforeAction, который должен сделать понятной суть функции. Для начала давайте напишем этот метод в нужном нам контроллере.
1 2 3 4 |
public function beforeAction($action) { return parent::beforeAction($action); } |
В таком виде на вашем сайте ничего не должно измениться. Этим кодом мы просто перегрузили beforeAction и внутри нашего метода вызвали родительский. При этом пока что ничего больше мы и не делаем. В качестве параметра принимается $action, в которой хранится объект с массой свойств полезных и не очень. При желании можете распечатать данный объект и изучить его.
1 2 3 4 5 |
public function beforeAction($action) { var_dump($action); die; return parent::beforeAction($action); } |
Среди прочего в этом объекте есть свойства actionMethod и id, в которых хранится название текущего экшена. Например, для главной страницы сайта они будут такими:
Что это нам дает? Да то, что в зависимости от страницы (экшена) мы можем выполнить код или не выполнять его. И один из классических примеров, который показывался в предыдущей статье:
1 2 3 4 5 6 7 |
public function beforeAction($action) { if (in_array($action->id, ['index'])) { $this->enableCsrfValidation = false; } return parent::beforeAction($action); } |
Смысл выполняемого кода следующий: если наименование действия, которое должно быть сейчас выполнено, входит в массив перечисленных (в примере выше это только один index), тогда необходимо выключить проверку CSRF-токена.
В общем, ничего сложного. Больше о фреймворке вы можете узнать из наших бесплатных или платных уроков. Также создание простейшего блога на Yii2 можно посмотреть в этом цикле уроков.