2010-06-04 42 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之后。