2011-02-05 83 views
3

在我的控制器內的對象,我有一個postDispatch鞏固我FlashMessenger消息:獲取鑑於從Zend的控制器插件

public function postDispatch() 
{  
    $messages = $this->_helper->getHelper ('FlashMessenger') 
     ->getMessages(); 

    if ($this->_helper->getHelper ('FlashMessenger') 
     ->hasCurrentMessages()) 
    { 
     $messages = array_merge ($messages, $this->_helper->getHelper ('FlashMessenger') 
      ->getCurrentMessages()); 
     $this->_helper->getHelper ('FlashMessenger') 
      ->clearCurrentMessages(); 
    } 

    $this->view->alert = $messages; 
} 

我想使之成爲一個控制器插件此。

更新:我意識到爲什麼我需要這個 - 我想通過JSON傳遞我的JSON消息時被JSON上下文調用。除非將消息添加到View對象,否則我不會收到消息。

我能得到消息到一個數組,但我不知道如何將它們傳遞給視圖:

class Plugin_FlashMessenger extends Zend_Controller_Plugin_Abstract 
{ 
    public function postDispatch($request) 
    { 
     $flashmessenger = Zend_Controller_Action_HelperBroker::getStaticHelper ('FlashMessenger'); 

     $messages = $flashmessenger->getMessages(); 
     if ($flashmessenger->hasCurrentMessages()) 
     { 
      $messages = array_merge ($messages, $flashmessenger->getCurrentMessages()); 
      $flashmessenger->clearCurrentMessages(); 
     } 

     // THIS LINE IS WRONG. HOW DO I SEND $messages TO THE VIEW? 
     $this->view->alert = $messages; 
    } 
} 

獎金的問題 - 這是實現這一目標的正確方法?謝謝!

回答

1

我相信這是做錯的方法。 FlashMessenger將從一個請求到下一個請求幾乎沒有通知;可在查看

因此,flashmessenger已經是一個控制器動作助手(爲了上述目的),爲什麼你要在其上創建另一個助手? :)

所以,你的問題實際上是在視圖中獲取消息。爲此,已經有一個觀點幫手。來自noumenal。這很棒。

+0

FlashMessenger在下一頁上呈現警報。所以如果你想發送頁面到這個頁面,你需要做一些邏輯(獲得之前的消息,獲得當前的消息,將它們合併)。所以我應該把邏輯放在佈局/視圖中?這當然簡單得多,但我認爲在視圖腳本中使用類似邏輯是不好的做法? – Corey 2011-02-05 20:28:38

+0

@Corey,提到的本體Flash Messenger視圖助手已經爲你處理了getMessages()/ getCurrentMessages()邏輯。 – 2011-02-07 12:04:03

0

如果你只是想在你的所有控制器中獲得這個功能,你可以擴展Zend_Controller_Action並創建一個包含你的post調度代碼的新類。

12

我在搜索相同的東西時發現了你的帖子。基於this thread,有兩種簡單的方法來完成它。

一:如果你的觀點是引導過程中初始化(resources.view[] =是你application.ini),你可以簡單地調用這個:

$view = Zend_Controller_Front::getInstance() 
     ->getParam('bootstrap') 
     ->getResource('view'); 

二:如果你的觀點並沒有引導期間初始化:

$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); 
if (null === $viewRenderer->view) { 
    $viewRenderer->initView(); 
} 
$view = $viewRenderer->view; 
相關問題