2012-04-28 5 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.'); 
     } 
    } 
} 

なぜます$ this->セッション - > setFlash( 'あなたの投稿が更新されました。');リダイレクトラインの前に行く?リダイレクトされると、なぜメッセージが表示され、その逆も言わないようになります。最初にリダイレクトしてメッセージをフラッシュしますか?あなたはfalseに三番目のパラメータを設定しない限り

答えて

2

方法は、リダイレクト後exit()を発行します。

この場合、setFlashはセッションにメッセージを追加します。このメッセージはセッションにロードされ、リダイレクトされたページがビューに表示されます。デフォルトではredirectexitとなりますので、決して実行されることはありません。 3番目のパラメータをfalseに設定しても、setFlashの動作は変更されません。

メッセージは、この投稿が編集されたか、新しい回答が投稿されたかのように、ページの小さな部分だけにしたい場合に使用します。あなたはリダイレクト(。つまり、HTMLにリダイレクト)する前にフラッシュメッセージを表示したい場合

、あなたの代わりに、コントローラ上flashメソッドを使用することができます(メッセージは、独自の完全なページを持っていることに注意してください):

redirect()と同様に、flash()メソッドは、操作後にユーザーを新しいページに誘導するために使用されます。 flash()メソッドは、別のURLにユーザーを渡す前にメッセージを表示するという点で異なります。

最初のパラメータは表示するメッセージを保持し、2番目のパラメータはCakePHP相対URLです。 CakePHPは、ユーザを転送する前に$ pause秒間$メッセージを表示します。

フラッシュされたメッセージに使用するテンプレートがある場合は、そのレイアウトの名前を$ layoutパラメータに指定することができます。

メッセージを表示しているページが最初に表示され、その後数秒後に自動的にリダイレクトされます。必要に応じて、4番目のパラメータとしてレイアウトを渡して、外観をより詳細に制御できます。

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

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