过滤器类Filter Classes

调度程序过滤器,在配置定义为类名时,应该扩展类DispatcherFilter提供路由CakePHP的目录。让我们创建一个简单的滤波器响应特定的URL文本“Hello World”:
App::uses('DispatcherFilter', 'Routing');
class HelloWorldFilter extends DispatcherFilter {

    public $priority = 9;

    public function beforeDispatch(CakeEvent $event) {
        $request = $event->data['request'];
        $response = $event->data['response'];

        if ($request->url === 'hello-world') {
            $response->body('Hello World');
            $event->stopPropagation();
            return $response;
        }
    }
}
这个类应该保存在一个文件app /路由/过滤器/ HelloWorldFilter。php和引导文件中配置根据它是如何在前一节中解释。这里有很多解释,让我们开始与美元的优先级值。
如前所述,当您只能使用过滤器类定义的顺序运行使用美元的优先级属性在类,默认值是10,如果属性声明,这意味着它将执行_after_路由器类解析请求。我们不希望这样的事情发生在我们的前面的例子,因为很可能你没有任何控制器设置为回答这个URL,因此我们选择9作为我们的首要任务。
DispatcherFilter暴露两种方法,可以在子类覆盖,它们beforeDispatch afterDispatch,执行之前或之后任何控制器分别执行。两种方法获得CakeEvent对象包含请求和响应对象(CakeRequest和CakeResponse实例)连同additionalParams数组内的数据属性。后者包含用于内部调度当调用requestAction信息。
在我们的例子中,我们有条件地返回$响应对象结果,这将告诉调度员没有实例化控制器和立即响应等对象返回给客户机。我们还增加了$事件- > stopPropagation()来防止其他过滤器后执行。
现在让我们创建另一个过滤器改变响应标头在任何公共页面,在我们的案例中是什么PagesController服务:
App::uses('DispatcherFilter', 'Routing');
class HttpCacheFilter extends DispatcherFilter {

    public function afterDispatch(CakeEvent $event) {
        $request = $event->data['request'];
        $response = $event->data['response'];

        if ($request->params['controller'] !== 'pages') {
            return;
        }
        if ($response->statusCode() === 200) {
            $response->sharable(true);
            $response->expires(strtotime('+1 day'));
        }
    }
}

这个过滤器将过期标头在未来1天产生的所有响应页面控制器。当然你可以做同样的控制器,这只是一个例子与过滤器能够做些什么。例如,而不是改变你可以缓存它使用缓存的响应类和服务的响应beforeDispatch回调。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值