Yii过滤器简介
过滤器是一段代码,可被配置在控制器动作执行之前或之后执行。例如, 访问控制过滤器将被执行以确保在执行请求的动作之前用户已通过身份验证;性能过滤器可用于测量控制器执行所用的时间。
一个动作可以有多个过滤器。过滤器执行顺序为它们出现在过滤器列表中的顺序。过滤器可以阻止动作及后面其他过滤器的执行。
过滤器有两种写法:
- 基于方法的过滤器
- 基于自定义过滤器类的过滤器
无论哪种过滤器,都必须在控制器中重写控制器的public function filters()方法,设置哪个过滤器对哪个动作起作用。
基于方法的过滤器
编写基于方法的过滤器,要经过三步:
- 在控制器中编写动作(Action);
- 在控制器中编写过滤器函数,函数名必须以filter为前缀,如:function filterAccessControl();
- 重写父类CController的filters()方法,定义过滤器与动作的关系;
实例:
<?php
class UserController extends CController{
**
* 第一步:创建动作
*/
function actionAdd(){
echo "actionAdd";
}
/**
* 第二步:创建基于方法的过滤器
*/
public function filterAddFilter($filterChain) {
echo "基于方法的过滤器UserController.filterAdd<br>";
$filterChain->run();
}
/**
* 第三步:重写父类CController的filters()方法,定义过滤器与动作的关系
* @see CController::filters()
*/
public function filters(){
return array(
//定义过滤器与动作的关联关系
'addFilter + add',
// array(
// 'application.filters.TestFilter',
// ),
);
}
}