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>