cake php 调度过滤器

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

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

<?php
namespace 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,内容如下:

<?php
namespace 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

猜你喜欢

转载自blog.csdn.net/leedaning/article/details/75635632