Filter

  • 首页
  • UnleashClub中文网
  • 领取MOLI红包
    你的位置:WRLD中文网 > UnleashClub中文网 > Filter

    Filter

    发布日期:2025-01-03 17:31    点击次数:88
    Filter 是一个代码片段,被配置用来在一个控制器的动作执行之前/后执行. 例如, an access control filter 可被执行以确保在执行请求的 action 之前已经过验证; 一个 performance filter 可被用来衡量此 action 执行花费的时间.一个 action 可有多个 filter. filter 以出现在 filter 列表中的顺序来执行.一个 filter 可以阻止当前 action 及剩余未执行的 filter 的执行.一 个 filter 可被定义为一个 controller 类的方法. 此方法的名字必须以 filter 开始. 例如,方法 filterAccessControl 的存在定义了一个名为 accessControl 的 filter. 此filter 方法必须如下:public function filterAccessControl($filterChain){    // call $filterChain->run() to continue filtering and action execution}复制代码$filterChain 是 CFilterChain 的一个实例, CFilterChain 代表了与被请求的 action 相关的 filter 列表. 在此 filter 方法内部, 我们可以调用 $filterChain->run() 以继续 执行其他过滤器以及 action 的执行.一个 filter 也可以是 CFilter 或其子类的一个实例. 下面的代码定义了一个新的 filter 类:class PerformanceFilter extends CFilter{    protected function preFilter($filterChain)    {        // logic being applied before the action is executed        return true; // false if the action should not be executed    }    protected function postFilter($filterChain)    {        // logic being applied after the action is executed    }}复制代码要应用 filter 到 action, 我们需要重写CController::filters() 方法. 此方法应当返回一个 filter 配置数组. 例如,class PostController extends CController{    ......    public function filters()    {        return array(            'postOnly + edit, create',            array(                'application.filters.PerformanceFilter - edit, create',                'unit'=>'second',            ),        );    }}复制代码上 面的代码指定了两个 filter: postOnly 和 PerformanceFilter. postOnly filter 是基于方法的 (对应的 filter 方法已被定义在 CController 中); 而 PerformanceFilter filter 是基于对象的(object-based). 路径别名 application.filters.PerformanceFilter 指定 filter 类文件是protected/filters/PerformanceFilter. 我们使用一个数组来配置PerformanceFilter 以便它可被用来初始化此 filter 对象的属性值. 在这里 PerformanceFilter 的 unit 属性被将初始化为 'second'.使用+和-操作符, 我么可以指定哪个 action 此 filter 应当和不应当被应用. 在上面的例子中, postOnly 被应用到 edit 和 create action, 而 PerformanceFilter 被应用到所有的 actions 除了 edit和 create. 若+或-均未出现在 filter 配置中, 此 filter 将被用到所有 action .

    TOP