Twig Extension: Générer une balise <a> automatiquement
Vendredi 10 Novembre 2023 08:30

Twig Extension: Générer une balise automatiquement

Je vous propose une nouvelle petite extension TWIG qui ne révolutionnera pas votre intégration mais vous donnera peut-être des idées car on est d’accord que le gain ici est minime.

L’idée ici est donc d’utiliser une seule fonction à laquelle on passe 2 à 4 paramètres (url, text, class et icon) dans le but de générer une balise html complète. On peut facilement imaginer cette fonction dans une boucle servant à afficher un menu.

Comme pour tout ajout, celà ce fait dans le document AppRuntime.php

public function linkDecoration(String $url, String $text, String $class = null, String $icon = null): String
{
    if($class != null){
        $class = ' class="'.$class.'"';
    }
    if($icon != null){
        $icon = ' ';
    }

    return ''.$icon.$text.'';
}

Et on n’oublie pas d’ajouter la fonction dans la liste du AppExtension.php

public function getFunctions(): array
{
    return [
        //…
        new TwigFunction('linkDecoration', [AppRuntime::class, 'linkDecoration']),
    ];
}

Pour l’appel je vous propose 3 possibilités:

{{ linkDecoration(path('app_twig_index'), 'Un lien avec une classe', 'MyClass')|raw }}

{{ linkDecoration(path('app_twig_index'), 'Un lien avec icone fontawesome', null, 'fa-brands fa-symfony')|raw }}

{{ linkDecoration(path('app_twig_index'), 'Un lien avec les deux', 'MyClass', 'fa-brands fa-symfony')|raw }}

Ce qui donnera comme rendu:

<a href="/twig/" class="MyClass">Un lien avec une classe</a>

<a href="/twig/"><i class="fa-brands fa-symfony"></i> Un lien avec icone fontawesome</a>

<a href="/twig/" class="MyClass"><i class="fa-brands fa-symfony"></i> Un lien avec les deux</a>