IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend Framework PHP Discussion :

Créer un fichier XML avec Zend_View


Sujet :

Zend Framework PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 98
    Points : 93
    Points
    93
    Par défaut Créer un fichier XML avec Zend_View
    Bonjour,

    Je voudrais générer un fichier xml en ZF MVC.
    En gros, pour une des actions de mon controller, je voudrais que la view renvois du xml à la place du html.
    Mon soucis c'est que dans l'aider de vue doctype il n'y a que du XHTML et pas d'XML pur.
    Je ne sais pas très bien comment changer le header pour qu'il indique ce ficher est au format xml.

    Quelqu'un pourrait m'aider ?

    Edit :

    Bon, j'ai un peu parcouru le web. Mais tout ce que j'ai trouvé n'a pas l'air de marcher...

    D'abord, pour éviter que php s'emmêle les pinceaux avec les short_open_tags, j'ai faire au début de ma view :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?= '<?xml version="1.0" encoding="UTF-8"?>' ?>
    Puis comme le Content-Type du header mentionnait toujours 'text/html', j'ai voulu le changer en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    public function myAction() {
      $this->getResponse()->setHeader('content-type', 'text/xml');
      ...
    }
    Mais là, je me tape le message d'erreur suivant :
    Uncaught exception 'Zend_Controller_Response_Exception' with message 'Cannot send headers; headers already sent in...
    Et là, je ne sais plus quoi faire.

  2. #2
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Je ne connais pas ZF mais si tu mets un petit coup de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->getResponse()->clearHeaders()
    avant de changer ton entête.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 98
    Points : 93
    Points
    93
    Par défaut
    Salut ThomasR,

    Malheureusement, vu le message d'erreur, je ne peux pas modifier les headers ...
    Je commence à me demander demander si Zend_View est le bon outil pour générer du xml. J'ai vu que ZF dispose d'un Zend_XmlRpc. Mais je ne connais pas du tout cette classe ni son but.

    Si quelqu'un a une idée, je suis prenneur

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 98
    Points : 93
    Points
    93
    Par défaut
    Je reparcouru la doc de ZF et je suis tombé sur cet article.

    Apparemment, il y a moyen de changer le Content-Type avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->getResponse()->setHeader('Content-Type', 'text/xml');
    C'est la première ligne de l'action de mon controller mais je continue a avoir un message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Uncaught exception 'Zend_Controller_Response_Exception' with message 'Cannot send headers; headers already sent in ...
    • Quelqu'un aurait-il déjà expérimenter le setHeader() ?
    • Faut-il le mettre dans le preDispatch ou peut-être le postDispatch du controller ?
    • Est-ce une erreur du au fait que j'ai une serssion ... ????


    Je comprends vraiment pas pourquoi ça marche pas

    PS : J'ai tenté le clearHeaders() avant mais rien y fait ...

  5. #5
    En attente de confirmation mail

    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2003
    Messages : 253
    Points : 637
    Points
    637
    Par défaut
    Je ne connais pas le mécanisme de levée d'exception en interne de setHeader() mais j'imagine que cette exception vient du warning PHP qui porte le même intitulé, et qui est levé par la fonction php header() dont le framework doit se servir.

    Le problème vient que quelque part dans ton appli, avant que tu ne définisses le content-type, tu as déjà affiché quelque chose, par un echo ou, plus vicieux, par un texte en dehors des balises <?php ?>.

    Pour avoir déjà vécu la situation, je pense pouvoir te garantir à 80% que ça doit être un bête espace situé avant ou après les balises <?php et ?>, le moindre caractère suffit à envoyer une réponse, et donc les entêtes... Et une fois envoyés, il n'est plus possible de les modifier. La balise fermante ?> étant facultative, le mieux est encore de ne pas la mettre, comme ça on est sûr de pas glisser d'espace après coup.

    Bon courage pour chercher le fichier fautif, et j'espère que ça t'aidera...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 98
    Points : 93
    Points
    93
    Par défaut
    Nighty,

    Merci pour ta réponse, c'est de dont je me doutais après avoir lu cet article.
    Je suis en train de repasser tous mes fichiers en revue, c'est la mort... J'en ai trop .
    Enfin je pense comme toi, je dois avoir un caractère qui traine qqpart.

    Merci encore,
    Olivier

  7. #7
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    Citation Envoyé par oliviercuyp
    Je commence à me demander demander si Zend_View est le bon outil pour générer du xml.
    J'aurais plutôt tendance à penser que non, en tout cas pour l'instance de Zend_View fournie par défaut par le framework, résolument destinée à la production de vues (X)HTML.

    Je te conseillerais plutôt l'emploi de XMLWriter pour produire ta sortie XML (en n'oubliant évidemment pas de désactiver le ViewRenderer).

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 98
    Points : 93
    Points
    93
    Par défaut
    Bonjour GrandFather,

    Le fichier xml que je veux créer à pour but de fournir un sitemap pour google.
    Je voulais mettre en place un système avec une cache output, ...
    Pourrais-tu jeter un oeil ici, j'explique mes intentions.

    Ce qui m'a encourager à utiliser Zend_View, c'est cet article de la doc officielle.

    Dis moi si ce n'est pas une bonne idée

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 98
    Points : 93
    Points
    93
    Par défaut
    Woaw !!!

    J'ai trouvé d'où venait le problème.
    C'est un truc de malade...

    Ayant passé tous mes fichiers en revue sans trouver le moindre caractère suspect, j'ai commencé à regarder les propriétés des fichiers.
    Apparemment, Dreamweaver m'avait ajouter une BOM (une espèce d'entête de fichier sur l'encodage utf-8) qui a été considéré par PHP comme de l'output.
    J'ai donc retiré cette BOM pour tous mes fichiers et ça marche.
    Seule soucis, Dreamweaver ne retient plus que mes fichiers sont en utf-8

    On en apprend tous les jours

  10. #10
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Citation Envoyé par oliviercuyp Voir le message
    Dis moi si ce n'est pas une bonne idée
    Ton dernier message répond en partie à ta propre question.

    Les règles de constitution d'un document XML sont strictes et ne souffrent aucune approximation ; plutôt que de créer du XML avec une vue et devoir gérer toi-même les questions d'encodage et d'échappement de caractères, d'utilisation des entités, etc. utilise DOM ou XMLWriter, ils gèreront cela pour toi.

  11. #11
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    je ne suis pas un spécialiste du zend framework mais c'est vrai qu'utiliser la class XMLWriter est un vrai jeu d'enfant.
    un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $X = new XMLWriter();
    				// Nouvel XMLWriter dans un fichier
    				$X->openUri('sitemap.xml');
    				$X->setIndent(true);
    				$X->startDocument('1.0', 'UTF-8');
    				// PI
    				$X->writeComment('Generated by me');
    				$X->startElement ('sitemap'); // [1]
    				$X->writeAttribute('version' , '1.0');
    ///// la suite
    Et on peux même tester si le fichier est valide avec XMLreader:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $xml = XMLReader::open('sitemap.xml');
    				$xml->setParserProperty(XMLReader::VALIDATE, true);
     
    				if($xml->isValid()){
    					// Enregistrement du résultat
    					return $X->flush();
    				}else {
    					// envoi une erreur
    					return print  'Fichier xml invalid';
    				}
    Bref c'est pas spécifique au framework

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JSP] Créer un fichier XML avec un textarea dans un formulaire.
    Par auxiliaire dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 06/08/2011, 18h31
  2. Créer un fichier xml avec DOM
    Par nancy maman dans le forum Général Python
    Réponses: 2
    Dernier message: 12/04/2011, 12h47
  3. Réponses: 2
    Dernier message: 30/09/2009, 17h43
  4. Réponses: 3
    Dernier message: 24/04/2007, 12h39
  5. [DOM] Php5 : créer un fichier xml avec Dom
    Par devadh dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 29/01/2007, 15h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo