我正在使用Zend框架,并且大部分操作控制器都返回了XML响应。 为了做到这一点,我必须初始化上下文切换并提供URL后缀“?format = xml”来调用每个动作。在Zend框架中将默认上下文设置为XML
有没有什么方法可以使这个默认?所以我不必为每个网址添加这个后缀?
问候,Andree。
我正在使用Zend框架,并且大部分操作控制器都返回了XML响应。 为了做到这一点,我必须初始化上下文切换并提供URL后缀“?format = xml”来调用每个动作。在Zend框架中将默认上下文设置为XML
有没有什么方法可以使这个默认?所以我不必为每个网址添加这个后缀?
问候,Andree。
EXTRA EXTRA ..查看全部关于IT!
http://framework.zend.com/manual/en/zend.controller.actionhelpers.html
看一看ContextSwitch里和AjaxContext
(编辑),建议你用:
在某些情况下,你可能想强制使用上下文;例如,如果激活上下文切换,您可能只想要允许XML上下文。您可以通过将上下文传递给initContext()来完成此操作:
$ contextSwitch-> initContext('xml');
如何在控制器的init()
方法中明确设置参数format
?
$this->getRequest()->setParam('format', 'xml');
...必须有这样做的不是那么懒办法,但...
是的,它的工作。谢谢! 仍然希望如果有任何少hacky解决方案虽然; p – Andree 2010-06-05 10:48:53
嗨,我有不同的情况...我希望这样的url必须是:format.xml或abc.xml,但呈现的输出必须是XML格式。我能做些什么来实现这一目标? – 2011-02-08 06:15:31
我在视图phtml页面添加了一个标题:content-type:text/xml后得到了xml输出。 – 2011-02-09 04:04:19
或者,你可以使用类似下面的设置默认,但仍允许其他情况下通过“格式”参数设置为:
$ajaxContext = $this->_helper->getHelper('AjaxContext');
$currentContext = $ajaxContext->getCurrentContext();
if (empty($currentContext)) {
$ajaxContext->initContext('xml');
}
此代码可以放置在你的管制员的init(),这将设置所有操作的默认背景。它也可以放在单独的操作中,以每个操作为基础设置默认上下文。
请注意,您也可以使用此参数更改名称不是“格式”以外的东西:
$ajaxContext->setContextParam('type');
然后,你可以调用与“/控制器/动作/类型/ XML”你的行动。
如果您不想在每个控制器init中设置参数,也可以将参数设置为全局路由参数。在你的引导拉动路由器实例,并调用
$router->setGlobalParam('format', 'xml');
或者你也可以在定义的路由设置的默认值,或者可能是如果您的网址在任何地方使用默认的路由器,你的名为PARAMS /格式/ XML之后。
您是否找到了较少破解的解决方案? – Zoborg 2011-01-28 13:44:32