xml
  • zend-framework
  • response
  • return
  • 2009-10-09 4168 views 13 likes 
    13

    Tôi gặp sự cố khi trả về XML trong ứng dụng ZF của mình. Mã của tôi:Cách trả về XML trong ứng dụng Zend Framework

    class ProjectsController extends Gid_Controller_Action 
    { 
        public function xmlAction() 
        { 
         $content = "<?xml version='1.0'><foo>bar</foo>"; 
         header('Content-Type: text/xml'); 
         echo $content; 
        } 
    } 
    

    Tôi cũng đã thử như sau:

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

    Có thể ai đó chỉ cho tôi đi đúng hướng như thế nào để đạt được điều này?

    Trả lời

    9

    Bạn đang thiếu dấu hỏi chấm dứt trên thẻ xml:

    <?xml version='1.0'> 
    

    Nó phải là

    <?xml version='1.0'?> 
    

    Thêm vào đó, có thể bạn sẽ cần phải vô hiệu hóa bố trí của bạn để nó in chỉ xml . Đặt dòng này trong xmlAction bạn phương pháp()

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

    Bạn có thể muốn xem xét các contextSwitch action helper

    Ngoài ra, bạn có thể muốn sử dụng DomDocument thay vì gõ ra xml trực tiếp

    +0

    làm thế nào để làm điều tương tự trong Zend Framework 3? –

    25

    CẬP NHẬT

    Rõ ràng, Zend Framework cung cấp một phương pháp tốt hơn cho điều đó ra khỏi hộp. Vui lòng kiểm tra tài liệu ContextSwitch action helper.

    Điều duy nhất bạn có thể muốn thay đổi là ép buộc ngữ cảnh XML trong phương thức init() của bộ điều khiển.

    <?php 
    
    class ProjectsController extends Gid_Controller_Action 
    { 
        public function init() 
        { 
         $contextSwitch = $this->_helper->getHelper('contextSwitch'); 
         $contextSwitch->addActionContext('xml', 'xml')->initContext('xml'); 
        } 
    
        public function xmlAction() 
        { 
        } 
    } 
    


    Cũ câu trả lời.

    Nó không hoạt động vì ZF hiển thị cả bố cục và mẫu sau mã của bạn.

    Tôi đồng ý với Mark, bố cục sẽ bị tắt, mặc dù ngoài ra bạn cũng nên vô hiệu hóa trình kết xuất chế độ xem. Và chắc chắn DOMDocument là nhiều hơn nữa thích hợp hơn khi bạn đang đi để đối phó với XML.

    Đây là một bộ điều khiển mẫu mà nên làm những gì bạn muốn:

    <?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

    Cảm ơn sự giúp đỡ! :) –

    +0

    Bạn được chào đón :) –

    +0

    nơi nào tôi đặt một tệp như thế này trong cấu trúc thư mục dự án khung công tác zend? không phù hợp với mô hình xô MVC –

    Các vấn đề liên quan