Comment utiliser les macros avec Twig
Vendredi 15 Septembre 2023 08:30

Comment utiliser les macros avec Twig

Twig peut faire bien plus que son utilisation basique de moteur d’affichage de variable ou de bouclage sur des tableaux.

D’ailleurs je vous ai parlé il n’y a pas si longtemps des extensions twig qui permette a Twig d’appeler des fonctions php.

Ici nous restons dans le twig, il fera très bien le boulot tout seul.

Comment ca marche?

L’important est de commencer par écrire notre macro dans notre fichier Twig.

{% macro helloWorld(name) %}
  {{ "Hello " ~ name ~ "!" }}
{% endmacro %}

Ensuite, vous pouvez l’appeler quand vous voulez via

{{ _self.helloWorld("World") }}

Et la récursivité?

Personnellement, je n’utilise presque qu’exclusivement les macros pour un usage récursif.

Par exemple pour gérer un menu.

{% macro generateMenuRecursive(elements) %}
    
    {% for element in elements %}
  • {{ element.title }} {% if element.children is defined and element.children|length>0 %} {{ _self.generateMenuRecursive(element.children) }} {% endif %}
  • {% endfor %}
{% endmacro %} {{ _self.generateMenuRecursive(menus) }}

Ici, on passe une collection d'éléments contenant un titre et pouvant contenir des enfants (qui sont évidemment une collection de la même entité) et on les affiche. Cette méthode récursive permettra de générer l’html de tout le menu avec ses sous-menus.

Petite astuce

Je trouve ça bizarre étant donné que l’on est dans le même document, mais il est possible d’importer votre macro afin de ne plus avoir à écrire le “_self.” devant chaque appel. A vous de voir si c’est réellement nécessaire.

{% from _self import generateMenuRecursive %}

{{ generateMenuRecursive(menus) }}