Бортовой журнал Ктулху

Выполнение действий перед экшеном в Yii2

Метод beforeAction позволяет выполнить произвольный код перед выполнением экшена, что следует из его названия. И практический пример использования.

Пример вызова метода:

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

В таком виде этот метод ничего не делает. Для выполнения какого-либо действия необходимо добавить в него код.

Например, сегодня мне понадобилось разобраться с ошибкой, которая возникала при отправке на стандартный контроллер POST запроса. Примерно такая:

exception 'yii\web\BadRequestHttpException' with message 'Не удалось проверить переданные данные.'

Это работает защита от CSRF-атак (Сross Site Request Forgery — «Межсайтовая подделка запроса»).

При помощи метода beforeAction можно отключить CSRF проверку для определенного экшена.

Нужно указать имя экшена для указания методу.

public function beforeAction($action)
{
 if (in_array($action->id, ['get'])) { // 
 $this->enableCsrfValidation = false; // отключаем CSRF
 }
 return parent::beforeAction($action);
}
 
public function actionGet()
{
// бесполезный код
}