使用FlashMessenger助手在Zend Framework中对Flash消息进行分类(警告,成功,错误)的最简单方法是什么?我还想要一种方法来检查控制器可能不一定转发请求的消息。目前,我相信这是通过FlashMessenger :: getCurrentMessage()?
完成的答案 0 :(得分:10)
在你的控制器中,你可以这样做:
$this->_helper->FlashMessenger(
array('error' => 'There was a problem with your form submission.')
);
$this->_helper->FlashMessenger(
array('notice' => 'Notice you forgot to input smth.')
);
在你看来,你可以回应这样的通知:
<?php echo $this->flashMessenger('notice'); ?>
这样的错误:
<?php echo $this->flashMessenger('error'); ?>
编辑:
检查this link:
...在这里调用常规的getMessages()方法是行不通的。这仅返回在实例化FlashMessenger时存储在相应ZendSession名称空间中的消息。由于此时添加此请求的任何消息都不在ZendSession命名空间中(因为FlashMessenger已实例化以添加消息),因此getMessages()不会返回它们。
对于这个用例,FlashMessenger还提供了getCurrentMessages()
方法(以及相关的当前方法系列),它返回当前请求中设置的消息。
答案 1 :(得分:2)
两个想法。
<强> 1。 PHPPlaneta 强>
查看Robert Basic的PHPlaneta源代码:
https://github.com/robertbasic/phpplaneta
他使用标准的FlashMessenger动作助手:
$this->_helper->flashMessenger()->addMessage(array('fm-bad' => 'Error occurred')
然后定义一个名为FlashMessenger的视图助手,以便他可以访问这些消息。在他的布局或视图脚本中,他只是调用:
<?php echo $this->flashMessenger(); ?>
视图助手使用键(例如:'fm-bad'
)为输出消息设置CSS样式。
<强> 2。 PriorityMessenger 强>
查看Sean P. O. MacCath-Moran的优先信使视图助手:
http://emanaton.com/code/php/zendprioritymessenger
我喜欢这样的事情是,保存消息以便在下一页加载时显示的整个业务对我而言应该完全在视图中。因此,在您的操作中,在重定向之前,您将使用您的消息和优先级填充视图助手。然后,在布局或视图脚本中,通过相同的视图助手输出这些消息及其优先级。
答案 2 :(得分:2)
好的,感谢大家的意见,但我实施了不同的方法。
我已经有一个扩展Zend_Controller_Action的父控制器,我在应用程序中放置了通用逻辑,因此在postDispatch()方法中,我将getCurrentMessages和getMessages合并到一个视图变量中。
public function postDispatch()
{
$messages = array_merge(
$this->_helper->flashMessenger->getCurrentMessages(),
$this->_helper->flashMessenger->getMessages()
);
$this->view->messages = count($messages) > 0 ? $messages[0] : array();
}
我通过控制器操作设置消息,如;
$this->_helper->flashMessenger(array('error'=>'This is an error'));
在我的布局文件中,我在$ messages变量上使用了条件;
<?php if(count($this->messages) > 0) : ?>
//.. my HTML e.g. key($this->messages) returns 'error'
// current($this->messages) returns 'This is an error'
<?php endif; ?>
这对我有用,因为消息是分类的,除了下一个重定向外,还可以从当前请求中获取。