2009-10-09 7 views
13

ZF 응용 프로그램에서 XML을 반환하는 데 문제가 있습니다. 내 코드 :Zend Framework 응용 프로그램에서 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(); 
    } 
} 

누군가는 이것을 달성하는 방법을 올바른 방향으로 날 지점 수 있을까요?

답변

9

당신은 XML 태그에 종료 물음표를 놓치고 :

<?xml version='1.0'> 

그것은 또한

<?xml version='1.0'?> 

해야합니다, 당신은 아마 그것은 단지 XML을 출력 귀하의 레이아웃을 사용하지 않도록해야합니다 .

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

당신은 또한 contextSwitch action helper

을 고려할 수 있습니다() 메소드 당신의 xmlAction에이 줄을 넣어 직접

+0

어떻게 젠드 프레임 워크 3에서 동일한 작업을 수행하기 위해 다음과 같습니다

당신이 원하는 일을해야 샘플 컨트롤러? –

25

UPDATE XML을 입력하는 대신 DomDocument을 사용할 수 있습니다

분명히, Zend Framework는 바로 사용할 수있는 더 나은 방법을 제공합니다. ContextSwitch action helper 설명서를 확인하십시오.

변경할 수있는 유일한 방법은 컨트롤러의 init() 메소드에서 XML 컨텍스트를 강제 적용하는 것입니다.

<?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가 코드 뒤에 레이아웃과 템플릿을 렌더링하기 때문에 작동하지 않습니다.

마크와 동의합니다. 레이아웃을 사용 중지해야합니다. 뷰 렌더러도 사용 중지해야합니다. 그리고 확실히 XML을 다룰 때 DOMDocument가 훨씬 더 바람직합니다.

<?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); 
    } 
} 
+0

도움을 주셔서 감사합니다! :) –

+0

당신은 환영합니다 :) –

+0

zend framework 프로젝트 폴더 구조에서이 파일을 어디에 두어야합니까? MVC 버킷 패러다임 –

관련 문제