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()除非您将第三个参数设置为 ,否则该方法将在重定向后发出false.

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

当您希望消息只是页面的一小部分时,您可以使用它,例如您在 SO 上收到的“此帖子已被编辑”或“已发布新答案”消息。

如果您想在重定向之前显示 flash 消息(即在 HTML 中重定向),您可以使用flash控制器上的方法来代替(请注意,该消息将有一个完整的页面):

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

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

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

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

$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 回答