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 :

probleme avec Twig [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    A la découverte de la POO
    Inscrit en
    Mai 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : A la découverte de la POO

    Informations forums :
    Inscription : Mai 2009
    Messages : 93
    Points : 61
    Points
    61
    Par défaut probleme avec Twig
    Bonjour à tous,
    je suis en pleine découverte de ce framework que je trouve vraiment top et j'ai un soucis d'affichage avec twig :

    j'ai un menu tout ce qu'il y a de plus classique et quand je suis dans la section affichée à l'écran,
    je veux afficher un class="active" sur le <li> correspondant...

    Rien que du très classique ...

    Apres quelques recherches, j'en suis arrivé à ceci qui est censé fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <ul class="nav nav-pills nav-stacked">
     
        {% for menu_item in liste_menu %}
        <li role="presentation" {% if menu_item.nom in app.request.attributes.get('_route') %} class="active" {% endif %}>
            <a href="{{ path( menu_item.route )}}" >{{ menu_item.nom }}</a>
        </li>
     
        {% endfor %}
     
    </ul>
    mais ça ne marche pas, pas d'erreur ni rien cependant.

    le truc est que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {{ app.request.attributes.get('_route') }}
    ne m'affiche rien du tout dans ma vue ...
    donc bien sur impossible de répondre à ma condition ci dessus.

    Qu'ai je bien pu faire de mal pour {{ app.request.attributes.get('_route') }} ne fasse rien ?

  2. #2
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    yooo man rasta fariiiiiiiiiiiiiiiiiiiiiiiiiiie,


    avec {{ dump(...) }} tu peux afficher le contenu d'un objet

    essais de voir ce que ça donne avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {{ dump( app.request.attributes.get('_route') )  }}
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {{ dump( app.request.get('_route') )  }}
    si rien
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {{ dump( app.request  )  }}

  3. #3
    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
    Bonsoir,

    Regarde dans le Profiler onglet Request, il y la liste des attributs de l'objet Request.
    Il me semble que c'est plutot "_route_name" et "_route_parameters"

    D'autre part tu utilises l'operateur "in" , ce qui veut dire que tu t'attends à ce que app.request.attributs.get('_route') soit un tableau ?

  4. #4
    Membre du Club
    Homme Profil pro
    A la découverte de la POO
    Inscrit en
    Mai 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : A la découverte de la POO

    Informations forums :
    Inscription : Mai 2009
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    Hou la vache, je commence à m’inquiéter la !
    les 2 premiers m'affichent "null"

    par contre le dump global m'affiche bien pleins de trucs mais suite à une recherche par mots clés dans la page,
    seul ceci ressort :
    '_route_params' =>
    array (size=3)
    ...

    il n'y rien d'autre sur _route
    je comprends mieux pourquoi j'ai rien !

  5. #5
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    et donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {{ dump( app.request.get('_route_params') )  }}


    ça donne quoi ?

  6. #6
    Membre du Club
    Homme Profil pro
    A la découverte de la POO
    Inscrit en
    Mai 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : A la découverte de la POO

    Informations forums :
    Inscription : Mai 2009
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    Et bien il n'y a pas mon url ! :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    array (size=3)
      '_format' => string 'html' (length=4)
      '_locale' => string 'en' (length=2)
      '_controller' => string 'SrittStockBundle:Stock:menu' (length=27)
    J'ai bien mon controller mais ce n'est meme pas celui qui m'interesse : c'est mon menu ...

  7. #7
    Membre du Club
    Homme Profil pro
    A la découverte de la POO
    Inscrit en
    Mai 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : A la découverte de la POO

    Informations forums :
    Inscription : Mai 2009
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par arnooo999 Voir le message
    Bonsoir,

    Regarde dans le Profiler onglet Request, il y la liste des attributs de l'objet Request.
    Il me semble que c'est plutot "_route_name" et "_route_parameters"
    Effectivement, je le vois bien dans le profiler ! A n'y rien comprendre :

    _controller Sritt\StockBundle\Controller\MarqueController::indexAction

    _route sritt_stock_marque

    _route_params []

    Citation Envoyé par arnooo999 Voir le message
    D'autre part tu utilises l'operateur "in" , ce qui veut dire que tu t'attends à ce que app.request.attributs.get('_route') soit un tableau ?
    ça je ne le maitrise pas encore ...
    quand je réussirai à avoir cette variable, je passerai à cette étape

  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
    S'il n'y a pas d'attribut "route", n'est ce pas tout simplement parce que cette route n'a pas de nom??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    /**
    * @Route("/")
    **/
    public function indexAction(){
    }
    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /**
    * @Route("/",name="index_page")
    **/
    public function indexAction(){
    }

  9. #9
    Membre du Club
    Homme Profil pro
    A la découverte de la POO
    Inscrit en
    Mai 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : A la découverte de la POO

    Informations forums :
    Inscription : Mai 2009
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    Houla, à aucun endroit je n'ai de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /**
     * @Route("/")
     **/
    mais comme j'ai un routing.yml, j'imagine que
    1 je n'ai pas besoin de ces annotations
    2 dans le profiler je vois ma route, il doit bien avoir un moyen de la prendre

  10. #10
    Membre du Club
    Homme Profil pro
    A la découverte de la POO
    Inscrit en
    Mai 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : A la découverte de la POO

    Informations forums :
    Inscription : Mai 2009
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    Bon alors, j'ai du grain à moudre.
    Voulant absolument cette information (ma route) pour mon menu.
    Je n'avais pas testé le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {{ app.request.attributes.get('_route') }}
    sur une autre vue ...
    Et ailleurs, cela marche tres bien !!!

    Je pense que ma maniere de faire le menu n'est pas vraiment optimale...
    : j'ai un controller principal ( stock )
    dans lequel j'ai mis ma
    public function menuAction()
    et que j'envoie vers menu.html.twig

    dans mon layout je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {{ render(controller("MonBundle:Stock:menu")) }}
    y a t il un moyen d'obtenir cette route dans cette configuration ou dois je changer de systeme de menu?

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 168
    Points : 219
    Points
    219
    Par défaut
    y'a moyen de récupérer la master request; style :
    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
     
     public function localesWidget()
        {
            /** @var \Symfony\Component\HttpFoundation\RequestStack $requestStack */
            $requestStack = $this->get('request_stack');
     
            $request = $requestStack->getMasterRequest();
     
            $locales =  array_diff(explode('|', $this->container->getParameter('locales')),[$request->getLocale()]);
     
            $content = $this->renderView('locales.widget.html.twig',array('request'=>$request,'locales'=>$locales));
     
            return new Response($content);
     
        }
    dans la vue de ton module tu utiliseras request et non pas app.request.

  12. #12
    Membre du Club
    Homme Profil pro
    A la découverte de la POO
    Inscrit en
    Mai 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : A la découverte de la POO

    Informations forums :
    Inscription : Mai 2009
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par goabonga Voir le message
    y'a moyen de récupérer la master request
    Euh... tu trouves cela ou exactement ?

  13. #13
    Membre du Club
    Homme Profil pro
    A la découverte de la POO
    Inscrit en
    Mai 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : A la découverte de la POO

    Informations forums :
    Inscription : Mai 2009
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    Bon alors voila ce que j'ai trouvé :

    dans le controller principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public function menuAction($route)
        {
     
        $liste=array(
            array('id' =>1, 'nom' => 'Stock', 'route' =>'sritt_stock_stock'),
    etc ...
     
            );
        return $this->render('SrittStockBundle:Stock:menu.html.twig',
            array( 'liste_menu' => $liste, 'route' => $route  // Le controller passe les variables au template
                 )
            );
        }
    Dans le layout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <div id="menu" class="col-md-3">
                {{ render(controller("SrittStockBundle:Stock:menu", {'route': app.request.attributes.get('_route') } )) }}
            </div>
    Et dans mon menu.html.twig
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <h3>Menu</h3>
     
    <ul class="nav nav-pills nav-stacked">
     
        {% for menu_item in liste_menu %}
        <li role="presentation" {% if menu_item.route in route %} class="active" {% endif %}>
            <a href="{{ path( menu_item.route )}}" >{{ menu_item.nom }}</a>
        </li>
     
        {% endfor %}
     
    </ul>
    Ca marche niquel.
    Que pensez vous de cette solution ?

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

Discussions similaires

  1. [2.x] probleme avec un formulaire crée dans la vue twig
    Par adel25 dans le forum Symfony
    Réponses: 1
    Dernier message: 11/11/2013, 00h58
  2. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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