学习 yii 框架 – 使用简单的动作过滤器

jerry Yii 2015年11月23日 收藏

这里我讲一下在yii框架中如何使用简单的过滤器(filter).

yii 框架 提供了很好的动作(action)过滤,使用的方法也很简单,例如:

只有通过 POST 请求才能访问 post/delete 页面,只需在控制器的 filters 方法中添加如下内容

public function filters(){
    return array(
        'postOnly + delete'
    );
}

这里的 postOnly 是 yii 内置的过滤器,还有 ajaxOnly (只允许 ajax 请求) 也是内置的过滤器. 如果需要过滤多个动作只需将多个控制器的名字使用逗号(,)分隔,然后放到加号(+)后面,如下:

public function filters(){
    return array(
        'postOnly + delete,submit...'
    );
}

上面说了怎么使用内置的过滤器,那么怎么来定制简单的过滤器呢,方法很简单

假如我们在开发 Restful Api 时会用到 PUT 请求,在服务端就需要过滤只有是 PUT 请求才可以访问到 update 控制器(举例说明),那我们就需要定义一个过滤 PUT 请求的过滤器 putOnly,定义的方法为:在控制器(Controller)中创建方法(function) filterPutOnly,方法的内容如下:

public function filterPutOnly($filterChain){
    if(Yii::app()->getRequest()->getIsPutRequest())
        $filterChain->run();
    else
        throw new CHttpException(400,'请求无效');
 }

自定义的过滤器的使用方法与上面的内置过滤器相同, 下面我说一下自定义过滤器的编写方法

方法名: filter+过滤器名(首字母大写) 参数:$filterChain 为必填项,具体请见 /framework/web/filters/CFilterChain.php yii 框架在调用过滤器时会自动传递它 方法体:如果过滤通过,允许用户方法控制器则 执行 filterChain->run(),不通过则抛出异常

通过以上介绍应该很容易的就会编写一些简单的过滤器了,例如过滤 Restful DELETE 请求的 deleteOnly 等等。