我只是遇到了一个令人费解的情况。我的控制器操作如下所示:
public function myaction($eventId = false) {
if(!$eventId) {
//list all events
$data = foo;
} else {
if(!$this->Event->findById($eventId) )
{
$this->Session->setFlash('myerror message', 'flash_frontend_message');
$this->redirect(array('controller' => 'events', 'action' => 'myaction'));
} else {
// display event information
$data = foo;
}
}
$this->set($data);
}
如果我使用在数据库中找不到的$ eventId调用该函数,它将输出一条错误消息,并将用户重定向回所有事件的列表。但是让我说我然后选择一个有效的eventId,查看相关信息然后按下浏览器后退按钮,先前的flash消息再次输出,即使这种情况下的URL不包含$ eventId。
我想发生的事情是页面从浏览器缓存加载而不是重新加载。我试图避免将视图存储在缓存中,如下所示:
<!--nocache-->
<?php echo $this->Session->flash(); ?>
<?php echo $this->Session->flash('auth'); ?>
<!--/nocache-->
但仍然会显示flash消息。
知道如何防止这种行为吗? 有没有办法在显示后清除闪光灯?
答案 0 :(得分:2)
你正在谈论正确的缓存,但试图用错误的缓存修复它。
<!--nocache-->
是php / html文件本身没有缓存语句。它与浏览器缓存无关。 您需要做的是设置正确的标题。
在请求对象中有一个方便的方法来处理这个问题: http://book.cakephp.org/2.0/en/controllers/request-response.html#interacting-with-browser-caching
我通过AppController在所有正常的前端操作中使用它:
public function beforeRender() {
$this->response->disableCache();
...
}