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 :

Modifier la Response dans un controller avec un event [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 54
    Points : 58
    Points
    58
    Par défaut Modifier la Response dans un controller avec un event
    Bonjour,

    Je cherche à modifier la Response dans les actions de mes controllers en y ajoutant automatiquement certaines variables (qui seront passées dans le template twig).

    Mes actions ressemblent à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        /**
         * @Route("/{id}/update", name="dossier_update")
         * @Template("ActhysDossierBundle:Dossier:edit.html.twig")
         */
        public function updateAction($id)
        {
    	// mes trucs...
     
            return array(
                'entity'      => $entity,
                'edit_form'   => $editForm->createView(),
            );
        }
    Ma question est: est-il possible d'ajouter automatiquement des variables provenant de ma classe (attributs protected, etc.) au tableau retourné, et ce pour toutes les actions de ma classe ?

    J'avais pensé à utiliser un event sur mon controller qui modifierait la Response en lui ajoutant mes paramètres et que cela soit donc "transparent" dans le code de mes actions mais je ne vois pas trop comment faire (ni si c'est possible). La documentation sur les events est succinte et je ne sais pas non plus comment "rajouter" des variables à mon objet Response une fois que je l'aurai récupéré avec un event.

    Une idée ?

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    t'as accès au méthode te ta class directement, qu'est ce que veux faire dans ta vue ?

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 54
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    t'as accès au méthode te ta class directement, qu'est ce que veux faire dans ta vue ?
    Je me suis mal exprimé, je voulais dire de ma classe "controller". En fait, j'ai des url "hiérarchisées" du style : /dossier/xxx/societe/yyy/contact/zzz ou société est une société appartenant au dossier, et le contact appartient à cette société. Bref, je fais suivre tous mes ID provenant de l'URL dans mes controllers (je ne souhaite pas retrouver tous les ID en remontant systématiquement aux parents grâce au dernier enfant, "contact" ici).

    Un exemple de controller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    /**
     * Controller Contact
     * @Route("/dossier/{dossier_id}/societe/{societe_id}/contact")
     */
    class LotController extends Controller { ... }
    Dans mes vues, j'ai besoin des dossier_id, societe_id et de l'éventuel contact_id s'il existe déjà (form de modification par exemple). De plus, j'ai une méthode dans mon controlleur qui construit un array me permettant de générer une navigation dans chaque template (des onglets spécialisés par controller) via une extension Twig. Je passe donc en permanence mes ID parents et mon array dans toutes les réponses de toutes les actions, ce qui est contraignant et sujet à erreurs.

    Merci de vos idées, je passe peut-être à côté de quelque chose de simple :-)

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    de tout façon ils sont déjà dans l'adresse

    donc ton route n'est pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    // @Route("/{id}/update", name="dossier_update")
    mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    // @Route("/dossier/{xxx}]/societe/{yyy}/contact/{zzz}/update", name="dossier_update")

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 54
    Points : 58
    Points
    58
    Par défaut
    En fait ma route est comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
         /* @Route("/{contact_id}/update", name="contact_update") */
        public function updateAction($dossier_id, $societe_id, $contact_id)
        {
            // Blabla ...
     
            return array(
                'entity'               => $entity,
                'form'                 => $form->createView(),        
                'dossier_id'        => $dossier_id,
                'societe_id'        => $societe_id,
                'subnav'            => $this->getSubnavData(),
            );
    dossier_id et societe_id sont récupéré depuis la route du controller. C'est le return de dossier_id, societe_id et de subnav (mon array pour construire ma nav spécialisée) que j'aurai aimé ne pas répéter dans chaque controller. C'est pourquoi je me demandais si il était possible de faire quelque chose qui "ajoute" ces paramètres automatiquement.

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    non pas d’automatisation, tu mais tu peux toujours faire un array_combine avec le Request

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 54
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    non pas d’automatisation, tu mais tu peux toujours faire un array_combine avec le Request
    OK, je pensais qu'il y aurait peut-être un event possible entre le moment où on retourne la réponse et le moment où Twig rend le template :-/.

    J'avais commencé à mettre en place quelque chose de similaire à ta solution déjà, je vais m'y tenir. Merci !

    Encore une petite question pour la route ? Si j'ai un objet Response existant avec déjà du contenu, sais-tu si et comment je peux lui ajouter des variables ? Quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $response->addContent (array('youpi'=>'bonjour');

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Response renvoie uniquement du contenu HTTP, c'est a Twig qu'il faut envoyé les paramètres, mais je vois pas trop ce que tu cherches a faire

  9. #9
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 54
    Points : 58
    Points
    58
    Par défaut
    En fait je me suis un peu emmêlé entre le retour du array pour que la réponse soit créée via l'annotation @template et le retour de la réponse elle-même !

    merci de tes réponses, résolu.

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

Discussions similaires

  1. Modifier un tableau dans un XML avec Python
    Par Peter_TLSE dans le forum Général Python
    Réponses: 4
    Dernier message: 07/04/2014, 15h54
  2. Modifier des données dans un tableau avec un userform
    Par sebastien-16600 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/03/2013, 21h23
  3. modifier un MapRoute dans un controller
    Par thor76160 dans le forum ASP.NET MVC
    Réponses: 1
    Dernier message: 04/12/2012, 11h36
  4. Réponses: 4
    Dernier message: 19/11/2011, 17h47
  5. Réponses: 2
    Dernier message: 24/11/2006, 08h54

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