Zend framework flash messanger сообщение и перенаправление
Итак, я создаю проект с использованием zend-framwork и пытаюсь реализовать помощник flash messenger, но не могу найти никакой хорошей практики для его реализации.
Что мне нужно, так это использовать flash messenger для отправки сообщения и перенаправления, в то время как сообщение будет отображаться непосредственно в определенном месте макета.phtml.
Я знаю, что для редиректора я могу сделать это:
$redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
$redirector->gotoUrl('/my-controller/my-action/param1/test/param2/test2')
->redirectAndExit();'
Что я могу сделать с flash messanger, чтобы заставить его работать ? и какова наилучшая практика для этого ?
3 ответов:
В вашем контроллере
public function init() { $messages = $this->_helper->flashMessenger->getMessages(); if(!empty($messages)) $this->_helper->layout->getView()->message = $messages[0]; }В вашем макете.phtml
<!-- Global notification handling to use call flashMessenger action helper --> <?php if(isset($this->message)) :?> <div class="notification"> <?php echo $this->message ;?> </div> <?php endif;?>Тогда, когда вы хотите использовать его
public function loginAction() { $this->_helper->flashMessenger('Login is success'); $this->_helper->redirector('home'); }Почти каждый раз, когда вы будете перенаправлять после использования flashMessenger.
Как использовать flash messenger в Zend предположим, у вас есть действие под названием " foo "
public function fooAction(){ $flashMessenger = $this->_helper->getHelper('FlashMessenger'); //some codes $flashMessenger->addMessage(array('error' => 'This is an error message')); $this->_redirect('/someothercontroller/bar'); } //someothercontroller/barAction public function barAction(){ $flashMessenger = $this->_helper->getHelper('FlashMessenger'); $this->view->flashmsgs = $flashMessenger->getMessages(); //pass it to view }В вашем представлении часть
<?php if(isset($this->flashmsgs)) { ?> <?php foreach($this->flashmsgs as $msg){ foreach ($msg as $key=>$diserrors) { if($key=="error"){?> //do wat you want with your message <?php } } }?>
Это должно работать внутри контроллера
/** * @var Zend_Controller_Action_Helper_FlashMessenger */ protected $flashMessenger = null; /** * initalize flash messenger * * @return void */ public function init() { $this->flashMessenger = $this->_helper->FlashMessenger; } /** * Action wich is redirectin.. and sets message * * @return void */ public function actiononeAction() { $this->flashMessenger->addMessage('FLY HiGH BiRD!'); $this->_redirect('/whatever/url/in/your/project'); } /** * display messages from messenger * * @return void */ public function displayAction() { $myMessages = $this->flashMessenger->getMessages(); $this->view->messages = $myMessages; }
Comments