Voici une arborescence constituée d'une entité Catégorie ayant les propriétés suivantes :
Dans le contrôleur, on récupère d'abord toutes les catégories de niveau
supérieur, c-à-d celles dont le parent est null
.
public function categories(CategoriesRepository $repo) { // Lire toutes les catégories de niveau supérieur $categs = $repo->findByParent(null); // Envoyer ces catégories au template Twig return $this->render('mon_controleur/liste_categories.html.twig', [ 'categories' => $categs ]); }
Le code Twig ci-dessous utilise une macro qui sera appelée récursivement pour afficher les catégories et leurs enfants.
À chaque boucle for
, les élements sont triés (filtre sort
) sur base
de leur propriété ordre
.
{% extends 'base.html.twig' %} {% macro afficheCateg(categorie) %} <ul> <li>#{{categorie.ordre}} : {{categorie.id}}. {{categorie.denom}}</li> {% for enfant in categorie.enfants | sort((a, b) => a.ordre <=> b.ordre) %} {{ _self.afficheCateg(enfant) }} {% endfor %} </ul> {% endmacro %} {% block body %} <h1>Catégories</h1> {% for categorie in categories | sort((a, b) => a.ordre <=> b.ordre) %} {{ _self.afficheCateg(categorie) }} {% endfor %} {% endblock %}