zoukankan      html  css  js  c++  java
  • 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 .

  • 相关阅读:
    idea安装破解
    项目中邮件发送
    (转)四种复制文件的效率高低
    备份
    关于时间
    转 累加含小数点的数据:parseFloat、toFixed等
    转 Java将PDF转换成图片
    (转)JAVA实现SFTP实例
    获取浏览器参数
    js 中日期转换
  • 原文地址:https://www.cnblogs.com/huixuexidezhu/p/5056035.html
Copyright © 2011-2022 走看看