Я получаю следующую ошибку в ZF2 FlashMessenger:
Вызов функции-члена toArray () для массива в /vendor/zendframework/zend-mvc/src/Controller/Plugin/FlashMessenger.php в строке 306
FlashMessages будет отображаться моим FlashMessageHelper:
namespace Application\View\Helper;
use Zend\View\Helper\AbstractHelper;
use Zend\View\Helper\FlashMessenger;
class FlashMessageHelper extends AbstractHelper {
public function __invoke(FlashMessenger $flashMessenger) {
$flashMessenger->setMessageOpenFormat('<div%s><button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button><p class="text-center">');
$flashMessenger->setMessageSeparatorString('</p><p class="text-center">');
$flashMessenger->setMessageCloseString('</p></div>');
$flashMessenger->setAutoEscape(false);
echo $flashMessenger->render('error', array(
'alert',
'alert-dismissible',
'alert-danger'
));
echo $flashMessenger->render('info', array(
'alert',
'alert-dismissible',
'alert-info'
));
echo $flashMessenger->render('default', array(
'alert',
'alert-dismissible',
'alert-warning'
));
echo $flashMessenger->render('success', array(
'alert',
'alert-dismissible',
'alert-success'
));
}
}
?>
Кто-нибудь знает об этой ошибке? Впервые эта ошибка произошла. Google и «zend-mvc» — repo — Issues ничего не говорят об этом.
Спасибо за внимание!
Смотрите это в ZF2 (Best Pratices):
Плагин 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 на другую страницу).
public function registerAction(){
if($formValid){
$this->flashMessenger()->addSucessMessage('Saved!');
} else{
#add to pool
$this->flashMessenger()->addErrorMessage('Fail');
#merge message
$feedback = array_merge(
$this->flashMessenger->getErrorMessages(),
$this->flashMessenger->getCurrentErrorMessages()
);
#clear pool
$this->clearCurrentErrorMessages();
}
#message in variable to VIEW
new ViewModel(array(
'feedback' => $feedback,
));
}
}
Если вы хотите углубиться в это, перейдите по ссылкам Официальная документация 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
Других решений пока нет …