2012-04-28 74 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