我的ZF2 FlashMessenger中出现以下错误:
在第306行的/vendor/zendframework/zend-mvc/src/Controller/Plugin/FlashMessenger.php中的数组上调用成员函数toArray()
FlashMessage将由我的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'
));
}
}
?>
有人知道这个错误吗?这是第一次发生此错误。谷歌和“zend-mvc” - 回购 - 问题对此没有任何说明。
感谢您的关注!
答案 0 :(得分:1)
在ZF2(最佳实践)中看到这一点:
插件FlashMessenger ,将您的消息发送到等待池(通过FlashMessenger Zend MVC 插件),该消息将显示在另一个页面请求中(通过 ViewHelper < / strong> FlashMessenger)。
有4种类型的消息可以与 Bootstrap 通知集成(错误,信息,默认,成功)。
现在让我们练习
在控制器中的操作中,您必须输入消息和品牌:
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文档链接,提供一个可用的方法,将有很多帮助:
查看 - &gt; http://framework.zend.com/manual/current/en/modules/zend.view.helpers.flash-messenger.html
CONTROLLER - &gt; http://framework.zend.com/manual/current/en/modules/zend.mvc.plugins.html#zend-mvc-controller-plugins-flashmessenger