2011-02-01 37 views
3

使用FlashMessenger helper在Zend Framework中对最新消息进行分类(警告,成功,错误)的最简单方法是什么?我还希望使用单一方法来检查控制器可能不需要转发请求的消息。目前,我相信这是通过FlashMessenger :: getCurrentMessage()完成的?在Zend Framework中对FlashMessenger消息进行分类

+0

完成此操作的另一种方法可以在这里找到:http://stackoverflow.com/questions/3950637/type-of-flash-messenger-in-zend – Gardner 2013-02-06 13:41:24

回答

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()方法(以及当前方法的相关系列),该方法返回在当前请求上设置的消息。

2

两个想法。

1 PHPPlaneta

退房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

退房肖恩PO MacCath - 莫兰优先使者视图助手:

http://emanaton.com/code/php/zendprioritymessenger

我喜欢这个的事情是,这整个保存邮件的业务在下一页加载显示我应该完全在视图内。因此,在您的操作中,在您的重定向之前,您可以使用消息和优先级填充视图助手。然后,在布局或视图脚本中,通过相同的视图帮助程序将这些消息与它们的优先级一起输出。

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; ?> 

这对我很有用,因为邮件被分类并且可以从当前请求中获得,除了下一次重定向。

相关问题