Zend Framework 2 Flash Messenger не возвращает сообщений

У меня довольно странная проблема с флэш-мессенджером в ZF2. Я использую его в довольно простом сценарии, сохраняя сообщение «завершение регистрации» после регистрации и перенаправления на страницу входа и отображения сообщения, однако сообщения никогда не возвращаются флэш-мессенджером.

В случае действия контроллера:

$this->flashMessenger()->addMessage('Registration complete'); return $this->redirect()->toRoute('default', array('controller' => 'user', 'action' => 'login')); 

В действии входа в контроллер:

 $flashMessenger = $this->flashMessenger(); $mes = $flashMessenger->hasMessages(); $cur = $flashMessenger->hasCurrentMessages(); 

Оба $ mes и $ cur ложны (я попробовал как просто убедиться). Может ли кто-нибудь пролить свет на это?

Я использую ZF 2.2.2 и PHP 5.3.14. Обработчик сохранения сеанса использует адаптер dbtable, и я попытался отключить его, а также установить диспетчер сеанса flashmessenger для использования одного и того же обработчика сохранения dbtable без результата.

Solutions Collecting From Web of "Zend Framework 2 Flash Messenger не возвращает сообщений"

Чтобы использовать FlashMessenger контроллера FlashMessenger , вам необходимо добавить в контроллер:

 <?php class IndexController extends AbstractActionController { public function indexAction() { $this->flashMessenger()->addMessage('Your message'); return $this->redirect()->toRoute('admin/default', array('controller'=>'index', 'action'=>'thankyou')); } public function thankyouAction() { return new ViewModel(); } } 

Добавьте следующий шаблон шаблона thankyou.phtml :

 <?php if ($this->flashMessenger()->hasMessages()) { echo '<div class="alert alert-info">'; $messages = $this->flashMessenger()->getMessages(); foreach($messages as $message) { echo $message; } echo '</div>'; } ?> 

Кажется, что ваш код так и должен быть, в рабочем процессе должно быть что-то сложное.

В этом случае вы можете отлаживать старый путь: попробуйте var_dump($_SESSION) чтобы узнать, заполнен ли он вашим FlashMessenger.

использование

 echo $this->flashMessenger()->renderCurrent(... 

вместо

 echo $this->flashMessenger()->render(... 

Я также столкнулся с такой же проблемой для (login flashmessage после регистрации), я решил это следующим образом

Примените проверку на странице макета, например

 <?php if($this->zfcUserIdentity()) { ?> <div id="flashMessageDiv" class="hide"> <?php echo isset($flashMessages) && isset($flashMessages['0']) ? $flashMessages['0'] : ''; ?> </div> <?php } ?> 

Это означает, что макет flashMessageDiv доступен только для зарегистрированного пользователя. теперь в вашем файле входа в систему (login.phtml) примените следующий код

  <?php $pathArray = $_SERVER['HTTP_REFERER']; $pathArray = explode("/",$pathArray); ?> <?php if ($pathArray[4] === 'register') { ?> <div id="flashMessageDiv" class="hide"> <?php echo "User details saved successfully"; ?> </div> <?php } ?> 

В приведенном выше коде я использовал HTTP_REFERER, который просто даст нам референтные данные url, проверьте, зарегистрирован ли референтный url, а затем show falshmessage.

Надеюсь, это поможет вам.

FlashMessenger теперь является официальным помощником в ZF2 и может быть легко интегрирован во все виды / макеты: FlashMessenger Helper – Zend Framework 2 Документация 2.3.1 – Zend Framework

Он также работает с TwitterBootstrap3, и есть альтернативная конфигурация для вашего module.config.php.