2010-06-04 39 views
3

我正在使用Zend框架,並且大部分操作控制器都返回了XML響應。 爲了做到這一點,我必須初始化上下文切換並提供URL後綴「?format = xml」來調用每個動作。在Zend框架中將默認上下文設置爲XML

有沒有什麼方法可以使這個默認?所以我不必爲每個網址添加這個後綴?

問候,Andree。

+0

您是否找到了較少破解的解決方案? – Zoborg 2011-01-28 13:44:32

回答

7

EXTRA EXTRA ..查看全部關於IT!

http://framework.zend.com/manual/en/zend.controller.actionhelpers.html

看一看ContextSwitch裏和AjaxContext

(編輯),建議你用:

在某些情況下,你可能想強制使用上下文;例如,如果激活上下文切換,您可能只想要允許XML上下文。您可以通過將上下文傳遞給initContext()來完成此操作:

$ contextSwitch-> initContext('xml');

+0

是的,在提出這個問題之前,我會詳細閱讀。但是我找不到需要的東西:刪除需要爲每個要使用XML響應的操作添加URL後綴「?format = xml」。 如果您在文檔中找到需要的信息,我會很高興您能指出哪一個。謝謝!=) – Andree 2010-06-04 09:58:24

+0

更新了我的回答 – Phliplip 2010-06-04 16:00:06

+0

感謝您的澄清!但仍然無效。我仍然必須使用「?format = xml」,否則上下文不會改變。 – Andree 2010-06-05 10:46:51

3

如何在控制器的init()方法中明確設置參數format

$this->getRequest()->setParam('format', 'xml'); 

...必須有這樣做的不是那麼懶辦法,但...

+0

是的,它的工作。謝謝! 仍然希望如果有任何少hacky解決方案雖然; p – Andree 2010-06-05 10:48:53

+0

嗨,我有不同的情況...我希望這樣的url必須是:format.xml或abc.xml,但呈現的輸出必須是XML格式。我能做些什麼來實現這一目標? – 2011-02-08 06:15:31

+0

我在視圖phtml頁面添加了一個標題:content-type:text/xml後得到了xml輸出。 – 2011-02-09 04:04:19

0

或者,你可以使用類似下面的設置默認,但仍允許其他情況下通過「格式」參數設置爲:

$ajaxContext = $this->_helper->getHelper('AjaxContext'); 
$currentContext = $ajaxContext->getCurrentContext(); 
if (empty($currentContext)) { 
    $ajaxContext->initContext('xml'); 
} 

此代碼可以放置在你的管制員的init(),這將設置所有操作的默認背景。它也可以放在單獨的操作中,以每個操作爲基礎設置默認上下文。

請注意,您也可以使用此參數更改名稱不是「格式」以外的東西:

$ajaxContext->setContextParam('type'); 

然後,你可以調用與「/控制器/動作/類型/ XML」你的行動。

0

如果您不想在每個控制器init中設置參數,也可以將參數設置爲全局路由參數。在你的引導拉動路由器實例,並調用

$router->setGlobalParam('format', 'xml'); 

或者你也可以在定義的路由設置的默認值,或者可能是如果您的網址在任何地方使用默認的路由器,你的名爲PARAMS /格式/ XML之後。