我使用
在控制器的索引操作上设置了视图缓存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
中我有文件的URL。将索引操作的$week
参数更改为我没有缓存文件的值,以便生成You are not authorized to access that location.
消息。
奇怪的是,如果我将网站的根映射到DiaryController
的索引操作,并带有
Router::connect('/', array('controller' => 'diary', 'action' => 'index'));
(再次在app/config/routes.php
中)我没有这个问题。当我没有登录时,我无法访问缓存的日记索引视图。
之前有没有人遇到过这个问题?你能说一些我可能错过的东西吗?或者您知道这是否是核心文件中的错误?我正在使用CakePHP 1.3.15。
答案 0 :(得分:1)
这是一个迟到的响应,但原因是缓存视图操作会绕过所有控制器和组件回调。 Auth组件通过回调来完成它的工作。因此,当您缓存操作时,将忽略这些检查。
你可以通过传递'callbacks'=>来强制回调。 $ cacheAction中的true选项,如下所示:
public $cacheAction = array(
'index' => array('callbacks' => true, 'duration' => '+56 hours')
);
但这部分地违背了视图缓存的目的,即绕过所有控制器逻辑。
更多信息here。