• Filter


    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 .

  • 相关阅读:
    React class & function component 的区别
    Webpack 4 + React + Typescript 搭建启动模版
    JavaScript的数据类型及其检测
    react SyntheticEvent 合成事件机制
    数组的排序
    Ajax 和 Ajax的封装
    go 结构的方法总结
    go 结构的方法2
    go struct 的方法1
    go 函数闭包
  • 原文地址:https://www.cnblogs.com/huixuexidezhu/p/5056035.html
Copyright © 2020-2023  润新知