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 :

Liste d'entités dans un menu


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 88
    Points : 49
    Points
    49
    Par défaut Liste d'entités dans un menu
    Bonsoir à tous

    Je débute sur Symfony et je progresse peu à peu....

    Si quelque part dans mon appli, j'avais une liste d'entités, il me suffirait dans le controleur correspondant de récupérer la liste via le repo et de la passer à la vue

    Par contre, si j'ai besoin d'avoir un menu basé sur une liste d'entités, cette liste doit etre affichée dans toutes les vues. Coté vue, il suffit de l'afficher dans la vue parente. Mais comment passer cette liste ? Je ne vais pas la charger dans chacun de mes controleur ?
    Bref, je ne vois pas bien à quel endroit j'appelle mon repo de façon à ce que ça se fasse sur chaque page de mon site

    Merci pour votre aide

  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
    comme tu le sais, à chaque requete il faut recharger en base ce qui doit l'être.
    heureusement, symfony gère un cache et on peut même le coupler avec un cache varnish pour plus de performance.

    sinon, on peut toujours mettre en session mais bof non.

    alors ce que tu peux faire c'est une sorte de before action ou avant chaque action un event listener est appelé pour charger la liste

    http://symfony.com/doc/current/event...r_filters.html

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 88
    Points : 49
    Points
    49
    Par défaut
    Merci pour ta réponse.

    J'avais pensé à cette solution mais je me demandais si je ne pouvais pas faire un controleur dont tous mes autres controleurs hériteraient et dans lequel je surcharge une méthode de retour de réponse (laquelle ???) pour qu'elle insere au passage la liste des entités

  4. #4
    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
    une classe .....controller étends déjà de la classe Controller et donc tu ne peux pas étendre plusieurs fois.

    mais tu peux utiliser les traits si tu utilises la bonne version de PHP.
    ou tu appelles un service dans chaque action du controller

    mais bon, la meilleure méthode c'est le before action qui a été prévu et conçu exprès dans cette optique par Symfony.
    car le but d'un framework justement c'est entre autre de nous "forcer" à utiliser les meilleures pratiques implémentaient dans le framework.

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 88
    Points : 49
    Points
    49
    Par défaut
    Merci pour cette précision et d'accord pour l'utilisation de la bonne pratique

    Par contre, pas d'accord avec le fait de ne pouvoir étendre plusieurs fois

    L'idée était de créer une classe ControllerBase qui hérite de Controller et ensuite que chacun de mes controleurs du projet au lieu de directement hériter de Controller, héritent à la place de ControlleurBase
    Ainsi, les mécaniques mises en place dans ControllerBase seraient propagées à tous les controleurs de mon projet....

    Mais je vais partir sur un before ou un after filter, selon vos conseils
    Encore merci

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 88
    Points : 49
    Points
    49
    Par défaut
    Il semble qu'il y ait une autre façon de faire, typiquement prévue pour mon cas de figure: Passer une variable à toutes les vues

    Voici ce que j'ai trouvé: http://symfony.com/doc/current/templ...variables.html

    Je vais creuser

  7. #7
    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
    oui bien sur mais bon, une variable global doit rester simple : une chaine, une valeur, une url... comme une constante
    je ne crois pas que c'est fait pour une liste d'objet (+ cette liste peut changer, je suppose), c'est possible mais il y a ces 2 raisons de ne pas le faire... (question bonne pratique )


    * après il y a un autre moyen avec la vue :

    dans un layout : tu fais un render controller dans un block (qui affiche la liste d'objet donc)
    {# ...Bundle/Resources/views/layout.html.twig #}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    {% block liste %}
        {{ render(controller('AppBundle:Default:topArticles')) }}
    {% endblock %}
    et tous les templates héritent de ce layout

    * c'est bien mieux comme ça !

    (mais le render controller est une technique qu'il ne faut pas abuser.. un ou deux sur une page , ça va )

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

Discussions similaires

  1. Trouver la list des element dans un menu avec webdriver
    Par stpaul04 dans le forum Tests et Performance
    Réponses: 2
    Dernier message: 17/07/2014, 22h19
  2. [Débutant] Liste d'entités dans une entité.
    Par Adrien.B dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 15/11/2013, 15h46
  3. Liste des catégorie dans le menu de navigation
    Par yamatoshi dans le forum WordPress
    Réponses: 0
    Dernier message: 09/06/2011, 17h56
  4. Réponses: 11
    Dernier message: 28/02/2007, 12h18
  5. [MySQL] Résultat d'une requette dans un menu en liste
    Par Mimisator dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/10/2005, 20h55

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