我使用以下命令在控制器的索引操作上设置了视图缓存
class DiaryController extends AppController {
...
var $cacheAction = array('index' => "+56 hours");
function index($week = null) {
...
}
}
在app/config/core.php
中使用以下选项
Configure::write('Cache.check', true);
...
Cache::config('default', array('engine' => 'File'));
日记控制器上的索引操作(以及站点的其余部分!)应该只有经过身份验证的用户才能访问,使用AuthComponent
和
class AppController extends Controller {
...
var $components = array('Auth', 'Security', 'Session','Cookie','RequestHandler');
function beforeFilter() {
$this->Auth->userModel = 'Admin';
...
}
...
}
我想使用以下命令将站点的根目录映射到我的登录表单
Router::connect('/', array('controller' => 'admin', 'action' => 'login'));
在app/config/routes.php
中。看起来一切正常,直到我注销,然后尝试在浏览器中访问mytestsite.com/diary/index
。即使我没有登录,我仍然可以访问这些页面。我认为这是缓存的问题,因为我只能访问我在app/tmp/cache/views
中有文件的urls。在You are not authorized to access that location.
消息中,将索引操作的$week
参数更改为我没有缓存文件的结果的值。
奇怪的是,如果我将站点的根映射到DiaryController
的索引操作,
Router::connect('/', array('controller' => 'diary', 'action' => 'index'));
(同样在app/config/routes.php
中)我没有这个问题。当我没有登录时,我不能访问缓存的日记索引视图。
以前有没有人遇到过这个问题?你能给我提个建议吗?我可能错过了什么?或者你知道这是不是核心文件中的一个bug?我使用的是CakePHP 1.3.15。
发布于 2012-08-15 20:50:10
这是一个较晚的响应,但原因是缓存视图操作会绕过所有控制器和组件回调。Auth组件通过回调来完成它的工作。因此,当您缓存操作时,这些检查将被忽略。
您可以通过在$cacheAction中传递一个‘=>’回调true选项来强制触发回调,如下所示:
public $cacheAction = array(
'index' => array('callbacks' => true, 'duration' => '+56 hours')
);
但这在一定程度上违背了视图缓存的目的,即绕过所有控制器逻辑。
更多信息here。
https://stackoverflow.com/questions/11613545
复制