У меня есть контроллер с method_1 (). В этом методе я вызываю method_2 (). В method_2 () у меня есть (try … catch) — блок с определенным flashMesseges и редиректом.
$this->flashMessenger()->addErrorMessage("There are errors.");
return $this->redirect()->toRoute('home');
Но это не работает. Но если я напишу как
$this->redirect()->toRoute('home');
$this->flashMessenger()->addErrorMessage("There are errors.");
Все ок. В коде method_1 ()
$this->flashMessenger()->addErrorMessage("There are errors.");
return $this->redirect()->toRoute('home');
работающий исправно. Я не понимаю Кто-нибудь может мне помочь?
Класс А — редирект не работает. И сообщение добавить в сессию.
class A {
public function manageAction()
{
$view = new ViewModel();
$form = $this->getForm();
$form = $this->fillForm($form);
$view->form = $form;
return $view;
}
public function fillForm($form)
{
try {
// ...
} catch (\Exception $e) {
$this->flashMessenger()->addErrorMessage("Error");
return $this->redirect()->toRoute('home');
}
return $form;
}
}
Класс Б — редирект рабочий. И сообщение напечатано.
class B {
public function manageAction()
{
$view = new ViewModel();
$form = $this->getForm();
$form = $this->fillForm($form);
$view->form = $form;
return $view;
}
public function fillForm($form)
{
try {
// ...
} catch (\Exception $e) {
$this->redirect()->toRoute('home');
$this->flashMessenger()->addErrorMessage("Error");
}
return $form;
}
}
Почему и как это работает?
redirect()
плагин возвращает Response
объект. Вы должны вернуть его в действии.
Обновить: Рекомендую переехать
try/catch
к действию.
class A {
public function manageAction()
{
$view = new ViewModel();
$form = $this->getForm();
try {
$this->fillForm($form);
} catch (\Exception $e) {
$this->flashMessenger()->addErrorMessage("Error");
return $this->redirect()->toRoute('home');
}
$view->form = $form;
return $view;
}
public function fillForm($form)
{
// ...
}
}
Плагин FlashMessenger , отправить ваше сообщение в пул ожидания (через FlashMessenger Zend MVC Plugin ), который будет отображаться на другой странице запроса (через ViewHelper FlashMessenger).
Существует 4 типа сообщений, которые вы можете интегрировать с начальная загрузка Уведомления ( ошибка, информация, по умолчанию, успех )
Теперь давайте потренируемся
В действие в пределах контроллер , Вы должны ввести свое сообщение и свой бренд:
use Zend\Mvc\Controller\Plugin\FlashMessenger;
public function registerAction(){
if($formValid){
$this->flashMessenger()->addSucessMessage('Saved!');
} else{
$this->flashMessenger()->addErrorMessage('Fail!');
}
//redirect to other route and show message
return $this->redirect()->toRoute('app');
}
В Посмотреть (.phtml), вам нужно только использовать:
#show messages of addErrorMessage();
echo $flash->render('error', array('alert', 'alert-dismissible', 'alert-danger'));
#show messages of addInfoMessage();
echo $flash->render('info', array('alert', 'alert-dismissible', 'alert-info'));
#show messages of addMessage();
echo $flash->render('default', array('alert', 'alert-dismissible', 'alert-warning'));
#show messages of addSucessMessage();
echo $flash->render('success', array('alert', 'alert-dismissible', 'alert-success'));
В Посмотреть , при использовании начальная загрузка :
$flash = $this->flashMessenger();
$flash->setMessageOpenFormat('<div>
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">
×
</button>
<ul><li>')
->setMessageSeparatorString('</li><li>')
->setMessageCloseString('</li></ul></div>');
echo $flash->render('error', array('alert', 'alert-dismissible', 'alert-danger'));
echo $flash->render('info', array('alert', 'alert-dismissible', 'alert-info'));
echo $flash->render('default', array('alert', 'alert-dismissible', 'alert-warning'));
echo $flash->render('success', array('alert', 'alert-dismissible', 'alert-success'));
Теперь это хак, если вы хотите просмотреть FlashMessages на экране без запроса или перенаправить страницу (идеально подходит для ошибок формы, которые вы не перенаправляете или AJAX на другую страницу), используйте renderCurrent и clear.
echo $ flash-> renderCurrent (‘error’, array (‘alert’, ‘alert-disptable’, ‘alert-danger’));
Если вы хотите углубиться в это, перейдите по ссылкам Официальная документация Zend 2, опробует доступные методы, очень поможет:
ПОСМОТРЕТЬ -> http://framework.zend.com/manual/current/en/modules/zend.view.helpers.flash-messenger.html
КОНТРОЛЛЕР -> http://framework.zend.com/manual/current/en/modules/zend.mvc.plugins.html#zend-mvc-controller-plugins-flashmessenger