Partage
  • Partager sur Facebook
  • Partager sur Twitter

Twig Switch Extension

Sujet résolu
    2 décembre 2020 à 13:17:08

    Bonjour,

    Je suis intéressé pour avoir une extension du langage Twig par le tag switch.

    J'ai trouvé ce développement qui semble correspondre à mon besoin : https://github.com/buzzingpixel/twig-switch

    ... sauf que je n'arrive pas à le mettre en oeuvre.

    J'ai déjà réalisé des extensions Globals et functions mais jamais une extension de tag.

    Je suis en version Symfony 5.1.

    J'ai ajouté dans mon répertoire src\TwigExtension le contenu du code proposé dans le paragraphe Installation de la doc. J'ai remplacé le /path/to/templates par ../templates et le cache par /var/cache et bien-sûr ajouté un switch dans un template selon la syntaxe indiquée.

    J'obtiens un message indiquant qu'il ne trouve pas la classe dans le fichier ajouté ... ce qui est normal si je puis dire puisqu'il n'y a pas de définition de class.

    ==> quelqu'un aurait-il mis en oeuvre cette extension ou une autre équivalente pour obtenir un switch dans twig ?

    ==> une idée par rapport à l'ajout effectué ?

    D'avance merci.

    • Partager sur Facebook
    • Partager sur Twitter
      2 décembre 2020 à 20:05:41

      Hello,

      Juste au cas où, tu pourrais nous dire pourquoi utiliser un switch ?

      • Partager sur Facebook
      • Partager sur Twitter
      $2b||!$2b
        2 décembre 2020 à 20:19:16

        J'ai fait une vue générique de liste à partir des metadata doctrine et pour afficher une donnée il faut connaître son type.

        Par exemple un datetime faut lui mettre le filtre date.

        Donc en faisant un switch sur le type de la metadata je sais appliquer le filtre qu'il faut.

        A+

        • Partager sur Facebook
        • Partager sur Twitter
          2 décembre 2020 à 20:47:30

          Et pourquoi ne pas créer une simple extension qui s'en charge ?

          Du genre :

          {{ field | applyFilter }}

          Dans lequel "field" est un objet contenant la valeur et le type de données ?

          • Partager sur Facebook
          • Partager sur Twitter
          $2b||!$2b
            2 décembre 2020 à 21:01:01

            Salut

            Autre point de vue : que t'apporterait un switch de plus qu'une suite de {% if … %}…{% elseif … %}… ? Tu aurais besoin du mécanisme qui est permis quand, dans PHP, tu ne mets pas de break dans un case, par exemple ?

            • Partager sur Facebook
            • Partager sur Twitter
              3 décembre 2020 à 6:17:56

              Merci pour vos réponses qui effectivement donnent des alternatives.

              J'étais parti sur le switch car je trouve cette instruction en php lisible et donc maintenable. Une suite de if else if me le semble moins. Pour l'instant, je fais avec. Oui, j'aurai bien aimé pouvoir oublier le break sur certains types de données dont le traitement est le même en affichage.

              Intéressante aussi l'idée de skuti et des filtres j'en ai fait.

              Néanmoins si vous avez le temps de regarder le développement dans le lien fourni dans le premier post, peut-être verrez vous de suite ce qui cloche dans ma mise en oeuvre.

              A+

              -
              Edité par monkey3d 3 décembre 2020 à 6:20:28

              • Partager sur Facebook
              • Partager sur Twitter
                3 décembre 2020 à 7:43:02

                Re,

                Alors de ce que je vois c'est pas un composant Symfony et c'est pas une extension "classique" dans Symfony qui à ma connaissance enregistre plutot des fonctions appelable dans les vues.

                Donc essaye peut etre de le déclarer en tant que service ?

                services:
                    buzzingpixel\twigswitch\SwitchTwigExtension
                        tags:
                            - { name: twig.extension }



                • Partager sur Facebook
                • Partager sur Twitter
                $2b||!$2b
                  3 décembre 2020 à 9:23:43

                  La solution ci-dessus me paraît être la bonne.

                  Vérifie quand-même que cette librairie est vraiment une implémentation de switch et pas un "simple sucre syntaxique" des suites de if … elseif …, donc qu'elle propose bien une instruction break autonome et pas que ce soit implicite à chaque {% case … %}. Je ne vois pas de quoi parser quelque chose d'équivalent dans le code.

                  Edit

                  Apparemment, c'est un break implicite qui serait fait dès qu'un nouveau case est rencontré.

                  -
                  Edité par Ymox 3 décembre 2020 à 11:32:51

                  • Partager sur Facebook
                  • Partager sur Twitter
                    4 décembre 2020 à 8:18:52

                    Bingo !

                    La solution qui fonctionne version légèrement modifiée de skuti :

                    services:
                        app.twig.switch:
                            class: buzzingpixel\twigswitch\SwitchTwigExtension
                            tags:
                                - { name: twig.extension }

                    Oui c'est un break implicite.

                    Cela me convient bien même si j'ai pour l'instant peu de type à tester.

                    Encore merci skuti et Ymox et à une prochaine sans doute.

                    Je clos le sujet.

                    Bye

                    -
                    Edité par monkey3d 4 décembre 2020 à 9:07:27

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Twig Switch Extension

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown