2009-10-09 8 views
13

Je rencontre des problèmes lors du renvoi de XML dans mon application ZF. Mon code:Comment renvoyer XML dans une application 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; 
    } 
} 

J'ai aussi essayé ce qui suit:

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

Quelqu'un pourrait-il me diriger dans la bonne direction comment atteindre cet objectif?

Répondre

9

Vous manquez le point d'interrogation se termine sur l'étiquette xml:

<?xml version='1.0'> 

Il devrait être

<?xml version='1.0'?> 

De plus, vous aurez probablement besoin de désactiver votre mise en page de sorte qu'il imprime seulement le xml . Mettez cette ligne dans votre méthode xmlAction()

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

Vous pouvez envisager la contextSwitch action helper

, vous pouvez également utiliser DomDocument au lieu de taper xml directement

+0

comment faire la même chose dans Zend Framework 3? –

25

MISE À JOUR

Apparemment, Zend Framework offre une méthode bien meilleure pour ce type de configuration. Veuillez vérifier la documentation ContextSwitch action helper. La seule chose que vous pourriez vouloir changer est de forcer le contexte XML dans la méthode init() du contrôleur.

<?php 

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

    public function xmlAction() 
    { 
    } 
} 


réponse Vieux.

Cela ne fonctionne pas car ZF affiche à la fois la mise en page et le modèle après votre code.

Je suis d'accord avec Mark, la mise en page doit être désactivée, mais vous devez également désactiver le rendu de vue. Et certainement DOMDocument est beaucoup plus préférable lorsque vous allez traiter avec XML.

Voici un contrôleur exemple qui devrait faire ce que vous voulez:

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

Merci pour votre aide! :) –

+0

Vous êtes les bienvenus :) –

+0

où dois-je placer un fichier comme celui-ci dans la structure du dossier du projet zend framework? ne correspond pas au paradigme du seau MVC –