26/03/2023

0. Twig

Lu 471 fois Licence Creative Commons

Création du controlleur

Commençons par créer le controlleur pour la page d'accueil. Pour simplifier sa création, utilisons la commande make:controller fournie par le MakerBundle:

php bin/console make:controller
[output]
[output] [ERROR] Missing package: to use the make:controller command, run:
[output]
[output]         composer require doctrine/annotations
[output]

Oups ! Il semblerait que MakerBundle demande l'installation de doctrine/annotations. Cependant nous n'allons pas l'utiliser, il s'agit d'une erreur. Pour contourner ce problème, installer le package en tant que dépendance de développement:

composer req doctrine/annotations --dev

Relancer la commande et indiquer le nom HomeController au programme interactif:

php bin/console make:controller
[output]
[output] Choose a name for your controller class (e.g. VictoriousPizzaController):
 > HomeController
[output]
[output] created: src/Controller/HomeController.php
[output] created: templates/home/index.html.twig
[output]
[output]  Success! 
[output]
[output] Next: Open your new controller class and add some pages!

La commande a généré la classe du controller mais aussi un template Twig !
Dans le navigateur, ouvrez http://localhost:8000/home, puis ouvrez /templates/home/index.html.twig.

Syntaxe de Twig

On retrouve à la première ligne le tag extends. Twig propose un système de blocs avec de l'héritage. Ici on indique que le fichier actuel hérite de la structure décrite dans base.html.twig:

{% extends 'base.html.twig' %}

Note: on indique le chemin vers les autres fichiers Twig depuis la racine des templates, pas besoin de chemin relatif ici.

En ouvrant base.html.twig on peut voir la structure classique d'un document HTML. À l'intérieur se trouvent des tags block. Un bloc est un emplacement dans lequel on peut mettre un contenu par défaut ou non, et qui sera remplacé par les templates qui en hériteront.
Par exemple le bloc title déclaré dans base.html.twig:

<title>{% block title %}Welcome!{% endblock %}</title>

Son contenu est écrasé dans home/index.html.twig:

{% block title %}Hello HomeController!{% endblock %}

Dans le bloc body du template home/index.html.twig est affiché une variable controller_name (passée par le controlleur) avec la syntaxe {{ variable }}:

<h1>Hello {{ controller_name }}! ✅</h1>

Twig dispose de nombreuses fonctions, dont certaines prennent la forme de filtre quand elles transforment les valeurs qu'on leur passe:

<a href="{{ '/srv/app/src/Controller/HomeController.php'|file_link(0) }}">src/Controller/HomeController.php</a>

En dehors de ces spécificités syntaxiques, Twig fournit tout ce qui est nécessaire pour réaliser des templates organisés: conditions, boucles, opérateurs, gestion de variables, ...
Il est vivement conseillé d'utiliser la documentation de référence pour progresser avec ce moteur de template.