【问题标题】:controller caching via custom routes通过自定义路由进行控制器缓存
【发布时间】:2011-08-14 19:45:15
【问题描述】:

你好, 我的目标是使用自定义路由获取页面的生成或缓存版本。

为此,我创建了第二个针对同一控制器的自定义路由。

Router::connect('/get/*', array('controller' => 'mycontroller', 'action' => 'myaction'));
Router::connect('/getnocache/*', array('controller' => 'mycontroller', 'action' => 'myaction'));

这样做的问题是,$cacheAction 忽略了这一点(什么都不缓存):

var $cacheAction = array(
    'get/*' => '1 hour'
);

正常使用 $cacheAction 时,所有请求都会被缓存:

var $cacheAction = '1 hour';

是我遗漏了什么还是这根本不可能?

【问题讨论】:

    标签: caching cakephp cakephp-1.3


    【解决方案1】:

    为同一个控制器/动作/参数信息创建两个不同的链接是不好的做法。请求页面时不会遇到问题,但如果您使用 CakePHP 创建链接,它将始终使用第一个匹配项,因此您始终会获得 /get/* url。

    但是,有一个解决方案。您可以简单地在第二个参数中指定更多项目:

    Router::connect('/get/*', array(
        'controller' => 'mycontroller', 
        'action' => 'myaction', 'useCache' => true
    ));
    
    Router::connect('/getnocache/*', array(
        'controller' => 'mycontroller', 
        'action' => 'myaction', 'useCache' => false
    ));
    

    根据额外的参数,您可以轻松决定是否缓存请求。我不确定如何在控制器中访问该参数(自从我上次使用 CakePHP 以来已经有一段时间了),但我知道这是可能的。它可能类似于控制器中的$this->params['useCache']

    【讨论】:

    • 要完成你的答案,参数是通过 $this->cacheAction = [MIXED];
    猜你喜欢
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 2013-08-23
    • 2015-10-12
    • 2011-12-03
    • 2013-09-30
    相关资源
    最近更新 更多