2012-04-28 3 views
0

Так в блоге CakePHP 2.0 учебник, есть следующие строки http://book.cakephp.org/2.0/en/tutorials-and-examples/blog/part-two.htmlCakePHP 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-> session-> setFlash ('Ваше сообщение было обновлено.'); идти перед линией перенаправления? Как только он перенаправляется, почему сообщение отображается, а не наоборот. Сначала переадресовываете, а затем запустите сообщение?

ответ

2

Метод перенаправляет exit() после перенаправления, если вы не установили третий параметр в false.

В этом случае setFlash добавляет ваше сообщение на сеанс, который затем может отображаться в вашем представлении, когда страница, которую вы перенаправляете на загрузки. По умолчанию redirect звонит exit, поэтому все, что вы ставите после него, никогда не будет выполнено. Даже если вы установите третий параметр на false, поведение setFlash не изменится.

Вы использовали бы это, если бы хотели, чтобы сообщение было всего лишь небольшой частью страницы, например, «это сообщение отредактировано» или «новый ответ был отправлен», сообщения, которые вы получаете здесь, на SO.

Если вы хотите, чтобы показать мгновенное сообщение перед тем Перенаправление (т. Е перенаправляет в HTML), вы можете использовать метод flash на контроллере вместо (обратите внимание, что сообщение будет иметь полную страницу самостоятельно):

Как и redirect(), метод flash() используется для направления пользователя на новую страницу после операции. Метод flash() отличается тем, что он показывает сообщение перед тем, как передать пользователя другому URL-адресу.

Первый параметр должен содержать отображаемое сообщение, а второй параметр - относительный URL-адрес CakePHP. CakePHP покажет сообщение $ за паузу в секунду, прежде чем перенаправлять пользователя.

Если вам нужен конкретный шаблон, для которого вы хотите использовать свое сообщение, вы можете указать имя этого макета в параметре $ layout.

Сначала будет отображаться страница с вашим сообщением, после чего она будет автоматически перенаправляться через несколько секунд после этого. Вы можете опционально передать макет в качестве четвертого параметра, чтобы иметь больше контроля над его внешним видом.

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

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

Смежные вопросы