Фильтры:
Фильтры запускаются в том порядке, в котором они указаны в списке фильтров, при этом фильтр может предотвратить выполнение действия и следующих за ним фильтров.
Фильтр может быть определён как метод класса контроллера. Имя метода должно начинаться на filter. Например, метод filterAccessControl определяет фильтр accessControl. Метод фильтра должен выглядеть так:
public function filterAccessControl($filterChain)
{
// для выполнения последующих фильтров и выполнения действия вызовите метод $filterChain->run()
}
ВОТ ТУТ НУЖНО ВЧИТАТЬСЯ
$filterChain это список последующих фильтров тоесть после выполнения того что в скобках(можно не доконца) мы может вызвать $filterChain->run() и выполнится фильтр в списке $filterChain(наверное они поочереди выполняются хз)
где $filterChain — экземпляр класса CFilterChain, представляющего собой список фильтров, ассоциированных с запрошенным действием.
Таак.тут непонятно
В коде фильтра можно вызвать $filterChain->run() для того, чтобы продолжить выполнение последующих фильтров и действия.
Фильтр также может быть экземпляром класса CFilter или его производного. Следующий код определяет новый класс фильтра:
class PerformanceFilter extends CFilter
{
protected function preFilter($filterChain)
{
// код, выполняемый до выполнения действия
return true; // false — для случая, когда действие не должно быть выполнено
}
protected function postFilter($filterChain)
{
// код, выполняемый после выполнения действия
}
}ну я понял что в коде можно вызвать.типа если ок то пошли дальше и вызываем ран()
кароче тут я непонял но поехали дальше
Для того чтобы применить фильтр к действию, необходимо переопределить метод CController::filters(), возвращающий массив конфигураций фильтров. Например:
class PostController extends CController
{
…
public function filters()
{
return array(
'postOnly + edit, create',
array(
'application.filters.PerformanceFilter - edit, create',
'unit'=>'second',
),
);
}
}
Данный код определяет два фильтра: postOnly и PerformanceFilter. Фильтр postOnly задан как метод (соответствующий метод уже определен в CController), в то время как PerformanceFilter — фильтр на базе класса. Псевдоним application.filters.PerformanceFilter указывает на файл класса фильтра — protected/filters/PerformanceFilter. Для конфигурации PerformanceFilter используется массив, что позволяет задать начальные значения свойств фильтра. В данном случае свойство unit фильтра PerformanceFilter будет инициализировано значением 'second'.
Используя операторы '+' и '-' можно указать, к каким действиям должен и не должен быть применён фильтр. В приведённом примере postOnly будет применён к действиям edit и create, а PerformanceFilter — ко всем действиям, кроме edit и create. Если операторы '+' и '-' не указаны, фильтр будет применён ко всем действиям.
ну тут примерно понятно.как дойдет до практики посмотрим.
Комментариев нет:
Отправить комментарий