这里我讲一下在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 等等。