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 :

Filtres twig pour les roles d'une entité


Sujet :

Symfony PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2019
    Messages : 36
    Points : 32
    Points
    32
    Par défaut Filtres twig pour les roles d'une entité
    Salut à tous,

    Je débute sur symfony et je suis entrain de faire un filtre pour les roles de mon entité User et je bloque sur un petit point. Voici le code de mon Extension :

    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
     
     
    class UserExtension extends AbstractExtension
    {
        public function getFilters()
        {
            return [
                new TwigFilter('roles', [$this, 'getRolesFilter']),
            ];
        }
     
        public function getRolesFilter(User $user) : array
        {
            return RoleEnum::getLabel($user->getRoles());
        }
    }
    Et voici mon erreur :

    Argument 1 passed to App\Extension\UserExtension::getRolesFilter() must be an instance of App\Entity\User, array given,


    Je tiens à préciser que mon getRoles est bien un array et c'est ce que j'aimerais récupéré


    Si quelqu'un a une solution je suis preneur, merci bcp !

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 707
    Points : 1 030
    Points
    1 030
    Par défaut
    AH AH AH

    ce user là, pas l'autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     public function getRolesFilter(User $user) : array

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2019
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    Pardon ? ^^
    Je n'ai pas compris !

  4. #4
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Moi non plus !

    Peux-tu nous montrer comment tu appelles le filtre dans ta vue ?

    En tout cas, de ce que je comprends de ton filtre, ta vue devrait ressembler à cela :

    Code twig : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <ul>
    {% for role in (app.user | roles) %}
    <li>{{ role }}</li>
    {% endfor %}
    </ul>
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2019
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    Oui exactement, voici comment est mon filtre dans ma vue :

    Code twig : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    {% for item in user.roles | roles %}
          <td>{{ item }}</td>
    {% endfor %}

  6. #6
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Désolé, mais ton code ne correspond pas tout à fait au mien.

    Dans ta vue tu envoies user.roles, soit $user->getRoles() soit un tableau contenant tous les rôles à ton filtre.
    Dans mon code j'envoie directement le "user", car tu as codé ton filtre pour qu'il reçoive un User, pas un tableau de rôle. C'est d'ailleurs ce que dit le message d'erreur.

    Donc tu dois enlever le .roles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    
    {% for item in user | roles %} 
          <td>{{ item }}</td>
    {% endfor %}
    (et par lisibilité je rajouterai les parenthèses ), mais bon c'est optionnel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    
    {% for item in (user | roles) %} 
          <td>{{ item }}</td>
    {% endfor %}
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2019
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    D'accord c'est plus clair et plus logique effectivement merci !

    Maintenant j'ai ceci comme erreur :

    An exception has been thrown during the rendering of a template ("Warning: Illegal offset type in isset or empty").

  8. #8
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    En même temps ton code est plutôt "bizarre", je ne sais pas ce que fait ton RoleEnum::getLabel !

    Je verrais plutôt un filtre label !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    {% for role in user.roles %}
          <td>{{ role | label }}</td>
    {% endfor %}
    

    Et ton filtre label serait un truc du genre :

    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
    class UserExtension extends AbstractExtension
    {
        public function getFilters()
        {
            return [
                new TwigFilter('label', [$this, 'getLabel']),
            ];
        }
     
        public function getLabel(string $role) : string
        {
            return RoleEnum::getLabel($role);
        }
    }
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2019
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    Merci beaucoup ça marche niquel maintenant !


    Dernière question :

    Est-il possible d'utilisé un filtre sur un champ de formulaire ? Je ne trouve pas grand chose sur internet peut être que ce n'est pas possible ?

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

Discussions similaires

  1. [applet]utilser des infos pour les traiter dans une servlet
    Par jeromejanson dans le forum Applets
    Réponses: 5
    Dernier message: 07/03/2010, 23h22
  2. [CSS] largeur fixe pour les elements d'une liste
    Par arnolpourri dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 24/05/2006, 13h25
  3. Réponses: 1
    Dernier message: 23/08/2005, 14h07
  4. []filtre sepia pour les images
    Par nabil dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 27/01/2004, 20h41
  5. Réponses: 2
    Dernier message: 08/10/2002, 18h26

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