配置过滤器(Configuring Filters)

过滤器通常是在引导中配置。php文件,但是您可以轻松地从任何其他配置文件加载它们之前,请求派出。添加和删除过滤器是通过配置类,使用Dispatcher.filters特别关键。默认CakePHP附带几已经为所有请求启用过滤器类,让我们来看看他们是如何补充道:
Configure::write('Dispatcher.filters', array(
    'AssetDispatcher',
    'CacheDispatcher'
));


每个数组值将被实例化,添加的类名作为生成的事件监听器在调度水平。第一个,AssetDispatcher是为了检查请求是否指的是一个主题或插件资产文件,如一个CSS、JavaScript或图像存储在插件的webroot文件夹或相应的主题。它将提供相应的文件,阻止其他调度周期。CacheDispatcher过滤器,当缓存。检查配置变量启用,将检查如果响应已经在文件系统缓存类似立即请求和服务缓存的代码。
正如你所看到的,都提供了过滤器有责任阻止任何进一步的代码和马上发送响应给客户端。但是过滤器并不局限于这个角色,不久我们将展示在这一节中。
您可以添加您自己的类名的过滤器,他们将他们定义的顺序执行。还有一个替代方法用于附加过滤器,不涉及特殊DispatcherFilter类:
Configure::write('Dispatcher.filters', array(
    'my-filter' => array(
        'callable' => array($classInstance, 'methodName'),
        'on' => 'after'
    )
));


如上所示,您可以通过任何有效的PHP调类型,您可能还记得,一个回调与call_user_func任何PHP可以执行。我们让一个小的例外,如果提供了字符串将被视为一个类名,而不是作为一个可能的函数名。这当然使PHP 5.3用户附加匿名函数的能力作为过滤器:
Configure::write('Dispatcher.filters', array(
   'my-filter' => array('callable' => function($event) {...}, 'on' => 'before'),
   //more filters here
));
之前和之后的关键只需要有效值,而显然意味着过滤器是否应该执行代码运行之前或之后任何控制器。另外定义过滤器可调用的关键,你也有机会为你的过滤器定义一个优先级,然后如果没有指定一个默认选择10个给你
所有过滤器将默认优先级10,你应该想要运行一个过滤器之前其他列表中,根据需要选择低优先级的数据:
Configure::write('Dispatcher.filters', array(
   'my-filter' => array(
        'callable' => function($event) {...},
        'on' => 'before',
        'priority' => 5
    ),
    'other-filter' => array(
        'callable' => array($class, 'method'),
        'on' => 'after',
        'priority' => 1
    ),
   //more filters here
));

显然,当定义优先级过滤器声明的顺序并不重要,但对于那些有相同的。当定义过滤器作为类名没有选项定义优先级在线,我们将很快的进入。最后,CakePHP的插件可以使用符号来定义过滤器位于插件:
Configure::write('Dispatcher.filters', array(
    'MyPlugin.MyFilter',
));


随意删除默认附加过滤器,如果你选择使用更高级的主题/更快的服务方式和插件资产或如果您不希望使用内置完整的页面缓存,或者只是实现你自己的。
如果您需要通过构造函数参数或设置调度过滤器类你可以通过提供一系列的设置:
Configure::write('Dispatcher.filters', array(
    'MyAssetFilter' => array('service' => 'google.com')
));


当过滤关键是一个有效的名称,参数的值可以是一个数组传递给调度的过滤器。默认情况下,基类将这些设置分配给$设置属性合并后班上的违约。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值