2011-04-28 82 views
1

嘿, 我的目标是使用自定义路由获取页面的生成或缓存版本。通过自定义路由控制器缓存

要做到这一点,我创建了第二个自定义路由针对同一个控制器。

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

我错过了什么,或者这是不可能的?

回答

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

+0

要完成您的答案,可通过$ this-> cacheAction = [MIXED]访问该参数; – Flatlin3 2011-04-28 18:02:42