2010-03-15 34 views
4

關於如何最好地向模型中的消息添加到Flash Messenger的任何想法?因爲FlashMessenger是一個動作助手,所以這似乎是不可能的,所以顯而易見的解決方案是在模型中創建一個內部消息對象,並從可以使用addMessage()的地方返回到控制器。但是如果你想要返還其他東西,這會下降。Zend Framework:Flash Messenger,從模型添加消息

另一個想法是這些內部消息的附加會話名稱空間,然後在輸出時將它與Flash Messenger命名空間消息合併在一起?

任何人有任何想法或經驗呢?乾杯。

回答

3

兩條路線聽起來都有效。

一個想法是將一個$ message數組添加到您的模型中,動作助手可以訪問該數組以獲取消息。這樣你可以一次返回多條消息。

另一種選擇是使用Subject/Observer pattern。讓您的模型實現主題界面,並在需要輸出消息時,觀察者例如notify。 flash messenger(爲此您必須實現Observer界面)。

+0

感謝戈登 - 有趣的想法,但想進一步可能可以使用多個型號/資源(因此可能產生消息)作爲給定的控制器動作的結果,因此我將不得不測試所有模型的消息,這將最終變得混亂。如果只有一種方法可以在模型中調用動作助手! – Dan 2010-03-15 17:16:25

+0

@Dan Subject/Observer Pattern可以輕鬆管理來自多個模型的消息。您只需從您喜歡的任何模型中通知您的自定義FlashMessenger,而無需將該使者放入模型中。這很重要,因爲信使不應該在模型中。它屬於表示層。 – Gordon 2010-03-15 18:46:35

+0

謝謝戈登,使用戈蘭的靜態電話 – Dan 2010-03-17 11:16:36

7

你可以從你的模型像這樣取以FlashMessenger:

$messenger = Zend_Controller_Action_HelperBroker::getStaticHelper('flashMessenger'); 
$messenger->addMessage('test message'); 
+0

謝謝戈蘭,那是給我一種享受! – Dan 2010-03-17 11:16:11

+1

但它不應該有。 -1表示域之間的硬編碼依賴關係。嘗試爲這些代碼編寫單元測試。 – markus 2011-09-27 11:18:02

+0

@markus你能解釋這種使用FlashMessenger的方法有什麼問題嗎?這是它在ZF 1.11 $ this - > _ helper方法不起作用的唯一方式。 – Darius 2013-09-16 12:52:09