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 les variables d'une méthode dans un layout [2.x]


Sujet :

Symfony PHP

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Récupérer les variables d'une méthode dans un layout
    Bonjour,

    Est-il possible de récupérer des variables créées dans un "template-parent" pour les réutiliser dans un "template-fils" ?

    Parce-que pour afficher un menu déroulant dans le layout (à partir d'une requête sql), je dois exécuter la requête 2 fois, 1 pour le javascript dans le head et 1 pour le code html dans le body. La requête est donc exécutée 2 fois... Pas super.

    Explications :
    ---------------

    Actuellement, dans mon layout, pour générer le js, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% render "XxxYyyBundle:Default:divers" with {'type':'menu','localisation':'head'} %}
    Puis, toujours dans mon layout, pour générer le html, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% render "XxxYyyBundle:Default:divers" with {'type':'menu','localisation':'body'} %}
    J'aimerais faire un truc du genre au tout début de mon fichier layout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% render "XxxYyyBundle:Default:divers" %}
    Et cette methode (diversAction) me renvoie 2 variables que peux utiliser dans mon layout...

    Avez-vous une solution ?

    Merci.

    Guilhem.

  2. #2
    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,

    je suis pas sûr d'avoir compris ce que tu voulais mais par rapport au problème d'éviter des requetes en doublons, tu pourrais centraliser la méthode qui te récupéres les entité.
    par exemple dans le controlleur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    class DefaultController{
     
    protected $entities;
     
    protected function getSingletonEntities(){
    if(null===$this->entities){
    //la requete n'est executé qu'une fois
    $this->entities=$this->get('doctrine')->getEntityManager()->getRepository('MyEntity')->findAll();
    }
    return $this->entities;
    }
    public function diversAction($type,$localisation){
    $entities=$this->
    return $this->render('template',array('entities'=>$entities);
    }
     
    }
    Je n'ai pas testé mais je pense que le framework utilisera toujours la même instance de DefaultController.

    Le plus propre serait sans doute de créer un petit service pour gérer ton singleton, ou bien de gérer ce cache dans le repository

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Oui le problème c'est que j'ai des controleurs différents pour les différentes parties de mon site... Et je vais pas dupliquer ce code dans chacun de mes controleurs !

    C'est pour ça que j'avais pensé à un "render" dans mon layout (qui lui est appelé à chaque fois) qui appele un controleur unique... Le problème c'est que ce controleur unique appelé par le layout renvoie des variables qui ne peuvent être utilisées que par le template appelé par ce contrôleur.... Et j'aimerais pouvoir utiliser les variables renvoyées dans tout mon layout !

  4. #4
    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
    En fait ce que tu recherches c'est les variables globales:
    http://symfony.com/doc/2.0/cookbook/...variables.html
    http://twig.sensiolabs.org/doc/advanced.html#globals

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $this->container->get('twig')->addGlobal('toto',$toto);
    //la variable toto est désormais disponible dans toutes les templates twig (layout de base, render, include ou macro)

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Oui super ! ! Merci !

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

Discussions similaires

  1. récupérer les echo d'une fonction dans une variable
    Par CaviarNAS dans le forum Langage
    Réponses: 2
    Dernier message: 29/12/2009, 16h46
  2. Réponses: 2
    Dernier message: 02/07/2009, 08h33
  3. Réponses: 3
    Dernier message: 13/03/2009, 15h20
  4. final dans les variables d'une méthode
    Par qdaemon_fr dans le forum Langage
    Réponses: 7
    Dernier message: 02/03/2009, 10h14
  5. Réponses: 5
    Dernier message: 28/09/2007, 14h58

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