Yii 1.1 过滤器原理学习

本文深入探讨Yii 1.1框架的过滤器原理,讲解如何在控制器中自定义过滤器,以及CFilterChain类的作用。通过预过滤器preFilter和后过滤器postFilter实现验证逻辑,并介绍内联filter和类过滤器的配置与应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文只简单记录一下 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 中的过滤器来进行下边的操作。

过滤器类型:

  • method-based filter(inline filter):
    基于方法(函数)的过滤器称为内联过滤器( inline filter ),此过滤器的执行方式就是执行一个函数,filter 返回的数组元素为一个字符串,后边加中括号来表面此过滤器将应用于(+)(或者不应用于(-))哪些 action,过滤器函数名为 filter + 字符串。例如:
class MyController extends CController
{
    public function filters()
    {
        return array('inlineFilterName[+|- Action1, Action2, ...]');
    }

    public function filterInlineFilterName($filterChain)
    {
        // 验证代码
        $filterChain->run();
    }
}
  • class-based filter
    基于类的过滤器,filters() 方法返回的数组元素为一个数组,包括类名、需要传入的属性键值对。
class MyController extends CController
{
    public function filters()
    {
        return array(
            array(
                'filterClassName[+|- Action1, Action2, ...]',
                'name1' => 'value1',
                'name2' => 'value2',
                ...
            )
        );
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值