本文只简单记录一下 Yii 1.1 中过滤器的运行流程和原理,如有任何问题,欢迎大家留言讨论。
Yii 1.1 的过滤器是在执行 action 前对某些操作。通过自定义过滤器,开发者可以在为一批 action 添加自己的验证逻辑。可以粗略认为是在执行 action 前执行了一个函数。
Yii 1.1 过滤器的调用是在 controller 类的 run() 函数中,通过调用 runActionWithFilters() 函数,来逐一验证 filters() 函数中定义的 filter。即在 controller 实例生成后,执行 action 前。
具体使用方法:
首先在 controller 中重写 filters() 方法,该方法返回一个过滤器配置数组,每个数据元素代表一个过滤器。对于不同的过滤器类型,数组元素的格式也不同,后边会详细给出例子,所以先不赘述了。
在说过滤器的具体使用之前,首先需要了解一个重要的类 CFilterChain 。此类用一个 list 存储了一个指定 action 的所有 filter 。执行此类的 run() 方法会从 list 中取出一个 filter 进行验证,当 list 中没有元素的时候,表示所有过滤器已顺利通过,则会执行 action 。
所有过滤器类需继承自 CFilter,通过重写 preFilter() 和 postFilter 方法来实现自己的验证逻辑。filter 方法需要传入参数 filterChain ,该参数是一个 CFilterChain 实例,如果该过滤器已验证通过,则需要调用 $filterChain->run() ,之后框架会根据 list 中的过滤器来进行下边的操作。
过滤器类型:</