====== Affichage d'une arborescence ======
Voici une arborescence constituée d'une entité Catégorie ayant les
propriétés suivantes :
* **parent** : catégorie mère (null pour une catégorie de niveau supérieur)
* **enfants** : collections de catégories filles (peut être vide)
* **ordre** : entier représentant l'ordre de tri des catégories dans une liste
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) %}
- #{{categorie.ordre}} : {{categorie.id}}. {{categorie.denom}}
{% for enfant in categorie.enfants | sort((a, b) => a.ordre <=> b.ordre) %}
{{ _self.afficheCateg(enfant) }}
{% endfor %}
{% endmacro %}
{% block body %}
Catégories
{% for categorie in categories | sort((a, b) => a.ordre <=> b.ordre) %}
{{ _self.afficheCateg(categorie) }}
{% endfor %}
{% endblock %}