cakephp 2.0博客教程重定向顺序

时间:2012-04-28 22:15:19

标签: php cakephp

所以在博客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('您的帖子已更新。');去重定向线之前?一旦它被重定向,为什么消息会显示出来,反之亦然。首先重定向然后闪烁消息?

1 个答案:

答案 0 :(得分:2)

  

除非您将第三个参数设置为exit(),否则该方法将在重定向后发出false

在这种情况下,setFlash会将您的消息添加到会话中,然后当您重定向到的页面加载时,该消息可以显示在您的视图中。默认情况下,redirect会调用exit,因此您放置的任何内容都将永远无法执行。即使您将第三个参数设置为falsesetFlash的行为也不会改变。

当您希望邮件只是页面的一小部分时,您可以使用此功能,例如“此帖已被编辑”或“已发布新答案”消息,您可以在此处获取。

如果您希望在重定向之前显示Flash消息(例如,在HTML中重定向),则可以在控制器上使用flash方法(请注意该消息将具有自己的整页):

  

与redirect()类似,flash()方法用于在操作后将用户定向到新页面。 flash()方法的不同之处在于它在将用户传递给另一个URL之前显示一条消息。

     

第一个参数应该包含要显示的消息,第二个参数是CakePHP相对URL。在转发用户之前,CakePHP将显示$ pause秒的$ message消息。

     

如果您希望使用闪存消息的特定模板,您可以在$ layout参数中指定该布局的名称。

首先显示显示您的消息的页面,然后它会自动重定向几秒钟。您可以选择将布局作为第四个参数传递,以便更好地控制其外观。

$this->flash('Your post has been updated.', array('action' => 'index'), 5);

http://book.cakephp.org/2.0/en/controllers.html