0

したがって、ブログ 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->Session->setFlash('Your post has been updated.'); リダイレクト行の前に移動しますか? リダイレクトされると、メッセージが表示されるのはなぜですか。その逆はありません。最初にリダイレクトしてからメッセージをフラッシュしますか?

4

1 に答える 1

2

exit()3 番目のパラメーターを に設定しない限り、このメソッドはリダイレクト後にを発行しますfalse

この場合、setFlashメッセージがセッションに追加され、リダイレクト先のページがロードされたときにビューに表示されます。デフォルトredirectでは が呼び出さexitれるため、その後に置くものは実行されません。3 番目のパラメーターを に設定してもfalse、 の動作はsetFlash変わりません。

これは、「この投稿が編集されました」または「新しい回答が投稿されました」という SO のメッセージのように、メッセージをページのごく一部にしたい場合に使用します。

リダイレクト (つまり、HTML でのリダイレクト) のにフラッシュ メッセージを表示したい場合はflash、代わりにコントローラーでメソッドを使用できます (メッセージには独自の完全なページがあることに注意してください)。

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

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

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

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

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

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

于 2012-04-28T22:45:26.247 に答える