2012-04-28 75 views
0

,有以下几行 http://book.cakephp.org/2.0/en/tutorials-and-examples/blog/part-two.htmlCakePHP的2.0博客教程重定向所以在博客CakePHP的2.0教程为了

<?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.'); 
     } 
    } 
} 

为什么$这个 - >会话级> setFlash( '您的信息已更新。');在重定向行之前?一旦它被重定向,为什么消息会显示出来,而不是反之亦然。首先重定向,然后刷新消息?

回答

2

,除非你的第三个参数设置为false的方法将重定向后发出exit()

在这种情况下,setFlash增加你的消息会话,当你的页面重定向到负载,然后可以显示在您的视图。默认情况下,redirect调用exit,所以你放在它后面的任何东西都不会被执行。即使将第三个参数设置为falsesetFlash的行为也不会改变。

如果您希望消息只是网页的一小部分,例如您在SO上获得的'已发布此帖子已编辑'或'发布了新答案',您可以使用此功能。

如果你想之前重定向(即重定向在HTML),显示提示信息,您可以使用flash方法在控制器上,而不是(请注意,该消息将有自己的一整页):

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

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

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

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

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

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