所以在博客cakephp 2.0教程中,有以下几行 http://book.cakephp.org/2.0/en/tutorials-and-examples/blog/part-two.html
<?php
public function edit($id = null) {
$this->Post->id = $id;
if ($this->request->is('get')) {
$this->request->data = $this->Post->read();
} else {
if ($this->Post->save($this->request->data)) {
$this->Session->setFlash('Your post has been updated.');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash('Unable to update your post.');
}
}
}
为什么$ this-&gt;会话 - &gt; setFlash('您的帖子已更新。');去重定向线之前?一旦它被重定向,为什么消息会显示出来,反之亦然。首先重定向然后闪烁消息?
答案 0 :(得分:2)
除非您将第三个参数设置为
exit()
,否则该方法将在重定向后发出false
。
在这种情况下,setFlash
会将您的消息添加到会话中,然后当您重定向到的页面加载时,该消息可以显示在您的视图中。默认情况下,redirect
会调用exit
,因此您放置的任何内容都将永远无法执行。即使您将第三个参数设置为false
,setFlash
的行为也不会改变。
当您希望邮件只是页面的一小部分时,您可以使用此功能,例如“此帖已被编辑”或“已发布新答案”消息,您可以在此处获取。
如果您希望在重定向之前显示Flash消息(例如,在HTML中重定向),则可以在控制器上使用flash
方法(请注意该消息将具有自己的整页):
与redirect()类似,flash()方法用于在操作后将用户定向到新页面。 flash()方法的不同之处在于它在将用户传递给另一个URL之前显示一条消息。
第一个参数应该包含要显示的消息,第二个参数是CakePHP相对URL。在转发用户之前,CakePHP将显示$ pause秒的$ message消息。
如果您希望使用闪存消息的特定模板,您可以在$ layout参数中指定该布局的名称。
首先显示显示您的消息的页面,然后它会自动重定向几秒钟。您可以选择将布局作为第四个参数传递,以便更好地控制其外观。
$this->flash('Your post has been updated.', array('action' => 'index'), 5);