我有我的ZF应用程序返回的XML问题。 我的代码:
class ProjectsController extends Gid_Controller_Action
{
public function xmlAction ()
{
$content = "<?xml version='1.0'><foo>bar</foo>";
header('Content-Type: text/xml');
echo $content;
}
}
我也试过如下:
class ProjectsController extends Gid_Controller_Action
{
public function xmlAction ()
{
$content = "<?xml version='1.0'><foo>bar</foo>";
$this->getResponse()->clearHeaders();
$this->getResponse()->setheader('Content-Type', 'text/xml');
$this->getResponse()->setBody($content);
$this->getResponse()->sendResponse();
}
}
可能有人点我在正确的方向如何实现这一目标?
你错过了对XML标签的结束问号:
<?xml version='1.0'>
它应该是
<?xml version='1.0'?>
此外,您可能会需要禁用布局,只会打印的XML。 把这一行在xmlAction()方法
$this->_helper->layout->disableLayout();
您可能要考虑ContextSwitch动作助手
此外,您可能需要使用的DomDocument ,而不是直接打字XML
UPDATE
显然,Zend Framework提供了一个更好的方式方法,开箱即用。 请不要检查ContextSwitch动作助手文档。
您可能需要更改的唯一事情是逼XML上下文控制器的init()方法。
<?php
class ProjectsController extends Gid_Controller_Action
{
public function init()
{
$contextSwitch = $this->_helper->getHelper('contextSwitch');
$contextSwitch->addActionContext('xml', 'xml')->initContext('xml');
}
public function xmlAction()
{
}
}
旧的答案。
这是行不通的,因为ZF使你的代码后,布局和模板。
我与马克同意,布局应禁用,但除此之外,你也应该禁用视图渲染器。 绝对的DOMDocument是多少,当你要处理XML更好。
下面是一个示例控制器应该做你想要什么:
<?php
class ProjectsController extends Gid_Controller_Action
{
public function xmlAction()
{
// XML-related routine
$xml = new DOMDocument('1.0', 'utf-8');
$xml->appendChild($xml->createElement('foo', 'bar'));
$output = $xml->saveXML();
// Both layout and view renderer should be disabled
Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->setNoRender(true);
Zend_Layout::getMvcInstance()->disableLayout();
// Set up headers and body
$this->_response->setHeader('Content-Type', 'text/xml; charset=utf-8')
->setBody($output);
}
}