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