Рейтинг:  0 / 5

Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

Использование фильтров в Yii 2

Использование фильтров

Фильтры являются особым видом поведений. Их использование ничем не отличается от использования поведений. Вы можете объявлять фильтры в классе контроллера путём перекрытия метода [[yii\base\Controller::behaviors()|behaviors()]]:



public function behaviors()
{
    return [
        [
            'class' => 'yii\filters\HttpCache',
            'only' => ['index', 'view'],
            'lastModified' => function ($action, $params) {
                $q = new \yii\db\Query();
                return $q->from('user')->max('updated_at');
            },
        ],
    ];
}

По умолчанию фильтры, объявленные в классе контроллера, будут применяться ко всем его действиям. Тем не менее, вы можете явно указать и конкретные действия задав свойство [[yii\base\ActionFilter::only|only]]. В примере выше фильтр HttpCache применяется только к действиям index и view. Вы можете настроить свойство [[yii\base\ActionFilter::except|except]] чтобы указать действия, к которым фильтр применяться не должен.

Кроме контроллеров, можно объявлять фильтры в модуле или в приложении. В этом случае они применяются ко всем действиям контроллеров, находящихся в этом модуле или приложении если не заданы свойства [[yii\base\ActionFilter::only|only]] и [[yii\base\ActionFilter::except|except]] как было описано выше.

Note: При объявлении фильтров в модулях или приложениях, следует использовать маршруты вместо идентификаторов действий в свойствах [[yii\base\ActionFilter::only|only]] и [[yii\base\ActionFilter::except|except]] так как сами по себе, идентификаторы действий не могут полностью идентифицировать действие в контексте модуля или приложения.

Когда несколько фильтров указываются для одного действия, они применяются согласно следующим правилам:

  • Пре-фильтрация
    • Применяются фильтры, объявленные в приложении в том порядке, в котором они перечислены в behaviors().
    • Применяются фильтры, объявленные в модуле в том порядке, в котором они перечислены в behaviors().
    • Применяются фильтры, объявленные в контроллере в том порядке, в котором они перечислены в behaviors().
    • Если, какой-либо из фильтров отменяет выполнение действия, оставшиеся фильтры (как пре-фильтры, так и пост-фильтры) не будут применены.
  • Выполняется действие, если оно прошло пре-фильтрацию.
  • Пост-фильтрация
    • Применяются фильтры объявленные в контроллере, в порядке обратном, перечисленному в behaviors().
    • Применяются фильтры объявленные в модуле, в порядке обратном, перечисленному в behaviors().
    • Применяются фильтры объявленные в приложении, в порядке обратном, перечисленному в behaviors().

Заберите ссылку на статью к себе, чтобы потом легко её найти ;)

Выберите, то, чем пользуетесь чаще всего:

Спасибо за внимание, оставайтесь на связи! Ниже ссылка на форум и обсуждение ; )


Обсудить эту статью

INFO: Вы отправляете сообщение как 'Гость'