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

    Tengo problemas para devolver XML en mi aplicación ZF. Mi código:Cómo devolver XML en una aplicación de 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; 
        } 
    } 
    

    También he intentado lo siguiente:

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

    es posible que alguien me punto en la dirección correcta cómo lograr esto?

    Respuesta

    9

    que se está perdiendo el signo de interrogación que finaliza en la etiqueta XML:

    <?xml version='1.0'> 
    

    Cabe

    <?xml version='1.0'?> 
    

    Además, es probable que tenga que desactivar su diseño por lo que se imprime sólo el xml . Poner esta línea en su xmlAction método()

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

    es posible que desee considerar la contextSwitch action helper

    Además, es posible que desee utilizar DomDocument en lugar de escribir a cabo xml directamente

    +0

    cómo hacer lo mismo en Zend Framework 3? –

    25

    ACTUALIZACIÓN

    Aparentemente, Zend Framework proporciona un método mucho mejor para el que viene de fábrica. Por favor, consulte la documentación ContextSwitch action helper.

    Lo único que podría querer cambiar es forzar el contexto XML en el método init() del controlador.

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


    respuesta Viejo.

    No funciona porque ZF representa el diseño y la plantilla después de su código.

    Estoy de acuerdo con Mark, el diseño debe estar deshabilitado, aunque además también debe deshabilitar View Viewer. Y definitivamente DOMDocument es mucho más preferible cuando se trata de XML.

    Aquí es un controlador de ejemplo que debe hacer lo que quiera:

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

    ¡Gracias por la ayuda! :) –

    +0

    De nada :) –

    +0

    ¿dónde coloco un archivo como este en la estructura de la carpeta del proyecto zend framework? no se ajusta al paradigma de cubo MVC –

    Cuestiones relacionadas