Работает точно так же, как и должно быть, это предполагаемое поведение помощника FlashMessenger.
FlashMessenger хранит добавленные вами сообщения в сеансе. только загружает их из сеанса при создании нового объекта FlashMessenger; тогда происходит запрос next . В этом весь смысл FlashMessenger; передавать сообщения от одного запроса к другому; не передавать сообщения в рамках одного запроса (для этого вы просто используете обычные переменные или хранилище, например Zend_Registry
).
Что вы обычно делаете с FlashMessenger, так это то, что вы сначала добавляете сообщение, а затем перенаправляете на ту же (или другую) страницу, используя, например,. метод _redirect или помощник по действиям Redirector. Удобно создать подкласс класса Zend_Controller и добавить свой собственный вспомогательный метод, который позволяет вам выполнять оба этих действия в одном методе, например в методе с именем _flash. Например, я обычно делаю что-то вроде этого:
<?php
class App_Controller extends Zend_Controller_Action
{
protected $_messages = array();
protected function _flash($message, $to = false)
{
$flashMessenger = $this->_helper->getHelper('FlashMessenger');
if ($message)
$flashMessenger->addMessage($message);
if (!$to)
$to = $this->_request->getRequestUri();
$this->_redirect($to);
}
public function postDispatch()
{
// Set flash messages
$flashMessenger = $this->_helper->getHelper('FlashMessenger');
$this->view->messages = array_merge($this->_messages, $flashMessenger->getMessages());
}
}
Затем я просто делаю $this->_flash("My message");
, что сделает две вещи: 1) Добавить сообщение в стек флеш-сообщений и 2) Обновить страницу.
Вы также можете видеть, что у меня есть protected $_messages
, причина этого в том, что если я хочу отобразить сообщение без обновления страницы, я могу просто добавить сообщение в этот массив.