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

Symfony PHP Discussion :

Récupérer dans une variable le code xml renvoyer par une vue


Sujet :

Symfony PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 96
    Points : 72
    Points
    72
    Par défaut Récupérer dans une variable le code xml renvoyer par une vue
    Bonjour,

    J'ai 2 bundles.

    Dans le 1er j'ai une action d'un de mes controleur qui me renvoie vers vue html ou une vue xml suivant le cas.
    Le code est du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if ($format == 'html')
                return $this->render('MonBundle:rep1:vue1.html.twig', array('entity' => $entity, 'listeMembres' => $listeMembres));
             else
                 return $this->renderView('MonBundle:rep1:vue2.xml.twig', array('entity' => $entity, 'listeMembres' => $listeMembres));
    Ceci fonctionne très bien.

    Depuis mon deuxième bundle j'aimerai pouvoir stocker dans une variable d'une action d'un controleur le code xml renvoyer par vue2.xml.twig de mon 1er bundle.
    Je ne sais pas comment faire.
    Depuis un controleur de mon 2ème bundle, j'ai testé ceci mais ça me renvoie à l'écran le résultat de vue2.xml.twig :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // 'ma_route' renvoie vers le controleur ci-dessus
    $url = $this->generateUrl('ma_route', array('X' => $X, 'format' => $format='xml'));
    $xml = $this->redirect($url);
    Ca me parait normal, mais je ne sais pas comment obtenir ce que je souhaite.

    Merci de votre aide.

  2. #2
    Membre actif
    Inscrit en
    Décembre 2009
    Messages
    282
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 282
    Points : 286
    Points
    286
    Par défaut
    si j'ai bien compris il suffit de lire le fichier ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $url = $this->generateUrl('ma_route', array('X' => $X, 'format' => $format='xml'));
    $xml = file_get_contents($url);
    Je ne sais plus si file_get_contents lis aussi à partir des urls, mais sinon il suffit de lui donner l'adresse physique

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 96
    Points : 72
    Points
    72
    Par défaut
    Merci de ta réponse, mais ça ne fonctionne pas.
    Ceci génère une erreur d'ouverture de fichier.

  4. #4
    Membre actif
    Inscrit en
    Décembre 2009
    Messages
    282
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 282
    Points : 286
    Points
    286
    Par défaut
    Pourtant ca marche également pour des URL normalement. fais un echo de ton URL et vérifie qu'elle est correcte !

  5. #5
    Membre actif
    Inscrit en
    Décembre 2009
    Messages
    282
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 282
    Points : 286
    Points
    286
    Par défaut
    il faut vraiment que l'url soit :
    http://serveur_name/dossier/script

    et pas juste /dossier/script

  6. #6
    Membre actif
    Inscrit en
    Décembre 2009
    Messages
    282
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 282
    Points : 286
    Points
    286
    Par défaut
    Après si tu le fichier se trouve sur ton serveur, c'est quand meme plus propre et plus rapide de l'ouvrir directement avec l'adresse physique, et pas avec une URL !!

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 96
    Points : 72
    Points
    72
    Par défaut
    Re,

    Le fichier ne se trouve pas sur le serveur, le contenu est généré dynamiquement.

  8. #8
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour,

    et si tu définissais ton controlleur en tant que service

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //dans controleur du bundle 2
    $laReponseEnXml=$this->container->get('controleur_du_bundle_1')->doAction('xml','param');
    http://symfony.com/doc/2.0/cookbook/...r/service.html

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Points : 658
    Points
    658
    Par défaut
    Depuis twig; il est possible d'appeler le resultat d'un autre controlleur directement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     {% render 'MonBundle:rep1:action1' with {'entity': entity, 'listeMembres' : liste_membres} %}
    Plus simple et surtout moins fouilli !
    Un petit si la réponse convient. Merci.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 96
    Points : 72
    Points
    72
    Par défaut
    Bonsoir,

    Ce que je souhaite faire c'est développer un outil qui pourrait être ensuite utiliser par des plugins qui se grefferaient sur d'autres outils.
    Les plugins ne doivent pas communiquer directement avec les entités de l'outil principal donc je ne peux pas utiliser ta solution RapotOR.

    J'ai trouvé un code qui fonctionne mais j'aimerais savoir si c'est une bonne façon de faire ou si c'est bien crade
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if ($format == 'html')
    {
                return $this->render('MonBundle:rep1:vue1.html.twig', array('entity' => $entity, 'listeMembres' => $listeMembres));
    }
    else
    {
                $xml = $this->renderView('MonBundle:rep1:vue2.xml.twig', array('entity' => $entity, 'listeMembres' => $listeMembres));
                return $this->forward($controleurClient, array('xml' => $xml));
     
    }
    Pour mon plugin j'ai 2 controleurs pour récupérer mon xml :
    Le 1er :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // 'ma_route' renvoie vers le controleur ci-dessus
    $url = $this->generateUrl('ma_route', array('X' => $X, 'format' => $format='xml', 'controleurClient' => 'controleur2'));
    $xml = $this->redirect($url);
    Le 2eme controleur traite mon xml

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/09/2011, 16h38
  2. Remplacer une valeur d'un parametre html par une variable javascript
    Par andromeda dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/10/2010, 23h21
  3. Réponses: 4
    Dernier message: 10/10/2010, 23h06
  4. Réponses: 3
    Dernier message: 23/06/2009, 18h27
  5. Réponses: 2
    Dernier message: 30/03/2007, 14h42

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