2013-06-25 49 views
6

ZF2文件描述了Creating and Registering Alternate Rendering and Response Strategies。我已閱讀過,但我並不真正瞭解如何使用策略。Zend Framework 2中的渲染/響應策略究竟意味着什麼以及如何使用它?

我有一個應用程序,應該發佈三種類型的輸出(JSON,XML和HTML),具體取決於HTTP頭接受。我如何使用這種情況下的策略?

+1

稍微撇開一個問題的範圍,但是你需要的東西實際上已經被轉換成了一個名爲''acceptableViewModelSelector()']的'ControllerPlugin'(http://zf2.readthedocs.org/en/latest/模塊/ zend.mvc.plugins.html#Zend的-MVC控制器-插件-acceptableviewmodelselector)。這應該涵蓋你所需要的;) – Sam

+0

嘿山姆!謝謝你的提示!其實我已經用['AcceptableViewModelSelector']實現了它(http://framework.zend.com/manual/2.1/en/modules/zend.mvc.plugins.html#zend-mvc-controller-plugins-acceptableviewmodelselector) 。但是現在我遇到了兩個問題:1.如果'Accept'包含多種類型,請求會自動轉發到'PhpRenderer'。 2.我無法爲JSON/XML設置'script_paths'(爲了預備輸出的數據,[這裏](http://stackoverflow.com/questions/17275230/how-to-handle-multidimensional-output -with-嵌套列表-使用最表gatewa))。 – automatix

+0

不太熟悉它,對不起。多個接受標題並不是我的區域:D – Sam

回答

5

Zend Framework 2中策略的鬆散概念是應用程序在MVC應用程序週期觸發事件時應遵循的行爲,事實上是事件驅動的

在更實際的方面,策略基本上是一個事件偵聽器,通常的\Zend\EventManager\AbstractListenerAggregate一個具體的實例,通常聽\Zend\Mvc\MvcEvent各種活動,如EVENT_RENDEREVENT_RENDER_ERROR

監聽器被附接到\Zend\EventManager\EventManager,然後使用前述方式\Zend\Mvc\MvcEvent訪問MVC週期(路由器,請求,響應,應用程序本身,等等)的所有基本資源,聽衆可以檢查的狀態申請並改變其流程。

在由ZF2官方文檔提供的示例中,偵聽器檢查請求的接受標頭,選擇渲染器並相應地更改響應。它有點老,所以我建議看一些更好的例子,閱讀由框架提供的主要策略代碼,即\Zend\Mvc\View\Http\RouteNotFoundStrategy,它們監聽EVENT_DISPATCHEVENT_DISPATCH_ERROR來處理404錯誤頁面的呈現。

另外,瞭解整個EventManager的工作原理至關重要。官方文檔相當不錯,再加上如果你谷歌周圍有很多關於它的東西。

+5

有幾點需要注意:「策略」通常涉及兩個事件。第一個是「渲染」,第二個是「響應」。在「渲染」事件中,策略通常會反思視圖模型以確定它是否能夠呈現它。如果是這樣,它會返回一個渲染器。返回渲染器的第一個策略獲勝。 「響應」事件用於獲取渲染結果並將它們推送到響應對象中。一個常見的用例是注入特定的頭文件,比如Content-Type。 – weierophinney

相關問題