cake php 调度过滤器

来源:互联网 发布:上海蓝光数据恢复 编辑:程序博客网 时间:2024/06/06 01:26

有时候需要对请求进行过滤,cake php中实现如下:

首先,在src/Routing/Filter创建所需的过滤器TrackingCookieFilter .php(/src/Routing/Filter/TrackingCookieFilter .php),内容如下:

<?phpnamespace App\Routing\Filter;use Cake\Event\Event;use Cake\Routing\DispatcherFilter;class TrackingCookieFilter extends DispatcherFilter{    public function beforeDispatch(Event $event)    {        $request = $event->getData('request');        $response = $event->getData('response');        if (!$request->getCookie('landing_page')) {            $response->cookie([                'name' => 'landing_page',                'value' => $request->here(),                'expire' => date('Y-m-d H:i:s', strtotime('+1 year +1 month +2 day', time())),            ]);            /*echo '<BR>Before htracking cookie response:<BR>';            dd($response);*/        }    }}

创建HttpCacheFilter.php,内容如下:

<?phpnamespace App\Routing\Filter;use Cake\Event\Event;use Cake\Routing\DispatcherFilter;class HttpCacheFilter extends DispatcherFilter{    public function afterDispatch(Event $event)    {        $request = $event->getData('request');        $response = $event->getData('response');        if ($response->statusCode() === 200) {            $response->sharable(true);            $response->expires(strtotime('+1 day'));        }    }}

要想使用这两个过滤器则需要在config/bootstrap.php文件中加入如下代码:

use Cake\Routing\DispatcherFactory;DispatcherFactory::add('TrackingCookie');DispatcherFactory::add('HttpCache');

如果想要对某一个路由生效可以在后面加参数for,如:

DispatcherFactory::add('HttpCache', ['for' => '/front/articles']);

则只会对/front/articles 路由生效。

如果想要对某一个前缀下的路由使用控制器只要将前缀加进去即可,如front 前缀:

DispatcherFactory::add('HttpCache', ['for' => '/front']);

这样的话访问/front/articles、/front/user还是其他路由中包含front前缀的路由都会使用过滤器。

加限制条件的应用

如果要加上额外的使用条件,如只对get请求使用过滤器:

DispatcherFactory::add('TrackingCookie', [    'when' => function ($request, $response) {        return $request->is('get');    }

这样其他类型(post、put、patch、delete等)请求则不会使用过滤器。

原文地址:https://book.cakephp.org/3.0/en/development/dispatch-filters.html#conditionally-applying-filters

Author:leedaning
本文地址:http://blog.csdn.net/leedaning/article/details/75635632

原创粉丝点击