控制器通过自定义路由缓存

时间:2011-04-28 15:16:59

标签: caching cakephp cakephp-1.3

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

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

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';

我错过了什么或者这根本不可能吗?

1 个答案:

答案 0 :(得分:2)

为同一个控制器/操作/参数信息创建两个不同的链接是不好的做法。在请求页面时不会遇到问题,但如果使用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']类似。

相关问题