2011-02-01 74 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; ?> 

這對我很有用,因爲郵件被分類並且可以從當前請求中獲得,除了下一次重定向。

相關問題