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 :

Twig : mon code fonctionne mais est-il optimisable ?


Sujet :

Symfony PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut Twig : mon code fonctionne mais est-il optimisable ?
    Bonjour,

    Ma question est dans le titre

    Code twig : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
            {% if label == 'success' %}
                {% set icon = 'circle-check' %}
            {% endif %}
     
            {% if label == 'info' %}
                {% set icon = 'circle-info' %}
            {% endif %}
     
            {% if label == 'warning' %}
                {% set icon = 'circle-exclamation' %}
            {% endif %}
     
            {% if label == 'danger' %}
                {% set icon = 'triangle-exclamation' %}
            {% endif %}

    j'utilise cette portion de code afin d'afficher le bon logo correspondant au bon message d'erreur/succès des messages flash Symfony.

    en gros je veux savoir si comme pour PHP il est possible d'optimiser avec ce genre de code exemple :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    switch ($i) {
        case 0:
            echo "i égal 0";
            break;
        case 1:
            echo "i égal 1";
            break;
        case 2:
            echo "i égal 2";
            break;
    }

    mais en twig !

    je suis pointilleux

    ou bien twig a déjà quelque chose pour mon cas ? Je n'ai rien trouvé dans la page "condition" dans la doc
    https://twig.symfony.com/doc/3.x/tags/if.html
    (il y a que des if ou des else/elseif...)

    merci a tous

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Utiliser switch en PHP (ou ailleurs) n'est pas une optimisation. Si cette structure de contrôle semble être la mieux appropriée d'un point de vue sémantique, car on teste bien une même variable avec plusieurs valeurs, elle reste en pratique plus lourdingue qu'un enchaînenemt de elseif. D'autre part, switch a un défaut majeur: l'impossibilité de faire une comparaison stricte.
    Depuis PHP 8, cette faiblesse a été en partie comblée grâce à l'introduction de match qu'on peut lui substituer dans certains cas, mais sinon il faut s'en remettre au bon vieux if elseif else.

    Twig de base ne propose pas ce genre d'alternative.
    Néanmoins dans un cas comme le tien où on compare une même variable avec un ensemble exhaustif de valeurs pour définir la valeur d'une unique variable, rien de tel qu'un ensemble clefs/valeurs: un tableau associatif en PHP (ou bien un objet Map), un hash avec Twig.

    Code Twig : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    {% set icons = { 'success': 'circle-check',
                     'info': 'circle-info',
                     'warning': 'circle-exclamation',
                     'danger': 'triangle-exclamation'
    } %}
     
    {{ attribute(icons, label) }}

    Pas besoin de structure de contrôle!
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    Salut, ton code ne fonctionne pas, je pense que le problème c'est qu'il s'agit d'un tableau alors que ma variable attend une chaine.

    Voici ton code dans mon twig :
    Code twig : 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
    <div class="container my-2">
        {% for label, messages in app.flashes %}
     
            {% set icon = {'success': 'circle-check', 'info': 'circle-info', 'warning': 'circle-exclamation', 'danger': 'triangle-exclamation'} %}
     
            {% for message in messages %}
                <div class="alert alert-{{ label }} d-flex align-items-center alert-dismissible fade show" role="alert">
                    <i class="fa-solid fa-{{ icon }} fa-3x me-2"></i>
                    <div>
                        {{ message | nl2br }}
                    </div>
                    <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
                </div>
            {% endfor %}
        {% endfor %}
    </div>

    Message d'erreur :
    An exception has been thrown during the rendering of a template ("Warning: Array to string conversion").

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/04/2021, 08h20
  2. [OpenOffice][Texte] Mon code fonctionne sous Windows mais pas sous Mac
    Par gregml dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 15/07/2015, 10h38
  3. Click button : Mon code marche mais l'affichage ne suis pas !
    Par 19cmos83 dans le forum Interfaces Graphiques en Java
    Réponses: 12
    Dernier message: 03/10/2007, 13h33
  4. Réponses: 6
    Dernier message: 12/04/2007, 13h58
  5. Un alert() en plus et mon code fonctionne, sans il foire :|
    Par narnou dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/03/2006, 13h44

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