如何在Zend框架应用程序返回XML(How to return XML in a Zend Fra

2019-07-21 16:41发布

我有我的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();
    }
}

可能有人点我在正确的方向如何实现这一目标?

Answer 1:

你错过了对XML标签的结束问号:

<?xml version='1.0'>

它应该是

<?xml version='1.0'?>

此外,您可能会需要禁用布局,只会打印的XML。 把这一行在xmlAction()方法

$this->_helper->layout->disableLayout();

您可能要考虑ContextSwitch动作助手

此外,您可能需要使用的DomDocument ,而不是直接打字XML



Answer 2:

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);
    }
}


文章来源: How to return XML in a Zend Framework application