Professional Documents
Culture Documents
Dynamisez Vos Vues À L'aide de Twig - Construisez Un Site Web À L'aide Du Framework Symfony 5 - OpenClassrooms
Dynamisez Vos Vues À L'aide de Twig - Construisez Un Site Web À L'aide Du Framework Symfony 5 - OpenClassrooms
Accueil > Cours > Construisez un site web à l’aide du framework Symfony 5 > Dynamisez vos vues à l’aide de Twig
20 heures Moyenne
Mis à jour le 08/07/2022
09:43
Twig est un moteur de gabarit développé en PHP inclus par défaut avec le framework Symfony 5.
https://openclassrooms.com/fr/courses/5489656-construisez-un-site-web-a-l-aide-du-framework-symfony-5/5517021-dynamisez-vos-vues-a-l-ai… 1/12
18/07/2022 07:12 Dynamisez vos vues à l’aide de Twig - Construisez un site web à l’aide du framework Symfony 5 - OpenClassrooms
Mais PHP est déjà un moteur de gabarit : pourquoi devrions-nous utiliser et apprendre un
moteur de gabarit supplémentaire ?
Le langage PHP qui était un moteur de gabarit à ses débuts est maintenant devenu un langage
complet capable de supporter la programmation objet, fonctionnelle et impérative.
Pourtant, nous avons toujours besoin d'un peu de code dynamique pour intégrer des pages web :
Voici pourquoi Twig est plus adapté que le PHP en tant que moteur de gabarit :
Éléments de syntaxe
Twig supporte nativement trois types de syntaxe :
https://openclassrooms.com/fr/courses/5489656-construisez-un-site-web-a-l-aide-du-framework-symfony-5/5517021-dynamisez-vos-vues-a-l-ai… 2/12
18/07/2022 07:12 Dynamisez vos vues à l’aide de Twig - Construisez un site web à l’aide du framework Symfony 5 - OpenClassrooms
Revenons à notre application Symfony précédente, nous voulions absolument afficher un "Hello
world" de toutes les façons possibles et imaginables . Eh bien, voici comment utiliser un gabarit
Twig dans un contrôleur Symfony :
php
1 <?php
2
3 // src/Controller/HelloController.php
4 namespace App\Controller;
5
6 use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
7 use Symfony\Component\Routing\Annotation\Route;
8
9 class HelloController extends AbstractController
10 {
11 /**
12 * Hello world, avec Twig cette fois :)
13 *
14 * @Route("/hello/{name}", name="hello")
15 */
16 public function hello($name)
17 {
18 $this->render('hello.html.twig', ['name' => $name]);
19 }
20 }
1 {# /templates/hello.html.twig #}
2
3 Hello {{ name }}!
Par défaut, le framework Symfony ira chercher les gabarits dans son dossier templates.
La fonction render prend en paramètre le chemin vers le gabarit et un tableau de
paramètres.
Les paramètres sont disponibles dans le gabarit.
Pourquoi devrait-on limiter nos templates aux pages HTML ? Par exemple, si l'on a besoin de
manipuler un fichier XML - disons un flux RSS -, nous pouvons tout à fait utiliser Twig pour cela, et
nous nommerons le fichier flux.rss.twig, par exemple.
Opérateurs
https://openclassrooms.com/fr/courses/5489656-construisez-un-site-web-a-l-aide-du-framework-symfony-5/5517021-dynamisez-vos-vues-a-l-ai… 3/12
18/07/2022 07:12 Dynamisez vos vues à l’aide de Twig - Construisez un site web à l’aide du framework Symfony 5 - OpenClassrooms
On retrouve tous les opérateurs dans Twig, tous décrits dans la documentation officielle.
twig
Par exemple :
in, is ;
les opérateurs mathématiques (+, -, /, %, //, *, **, %) ;
les opérateurs de logique (and, or, not...) ;
les opérateurs de comparaison (==, !=, <, >, >=...) ;
des opérateurs plus utilitaires (~, ?:...).
Bien que ce soit possible, vous ne devriez jamais avoir à écrire vos propres opérateurs :
consultez la documentation en cas de besoin.
Tags
Les tags sont des éléments de langage propres à Twig.
filtres
Il est possible d'étendre Twig avec trois types d'extensions différentes : les fonctions, les filtres et
les macros.
https://openclassrooms.com/fr/courses/5489656-construisez-un-site-web-a-l-aide-du-framework-symfony-5/5517021-dynamisez-vos-vues-a-l-ai… 4/12
18/07/2022 07:12 Dynamisez vos vues à l’aide de Twig - Construisez un site web à l’aide du framework Symfony 5 - OpenClassrooms
Parmi la liste des fonctions disponibles nativement, voici les plus utilisées :
Là où une fonction peut changer la valeur d'une variable, un filtre change seulement son
affichage. On utilise l'opérateur "pipe" | pour appliquer un filtre. Les filtres peuvent être
chaînés.
twig
1 {{ 'foo'|capitalize|reverse }} {# "Oof" #}
Par défaut, Twig protège et échappe toute valeur, donc s'il vous faut afficher un contenu HTML ou
Javascript, utilisez le filtre e ou raw (aucune protection appliquée).
twig
Parmi la liste des filtres disponibles nativement, voici les plus utilisés :
Avec tous ces fonctions et filtres, vous devriez déjà pouvoir faire de très belles intégrations, mais il
y a mieux, une fonctionnalité de Twig particulièrement utile. Regardez l'exemple qui suit :
twig
https://openclassrooms.com/fr/courses/5489656-construisez-un-site-web-a-l-aide-du-framework-symfony-5/5517021-dynamisez-vos-vues-a-l-ai… 5/12
18/07/2022 07:12 Dynamisez vos vues à l’aide de Twig - Construisez un site web à l’aide du framework Symfony 5 - OpenClassrooms
Une extension Twig est une classe qui permet de définir ses propres filtres et fonctions et qui
implémente Twig_ExtensionInterface, mais on préférera étendre la classe abstraite
AbstractExtension:
php
1 <?php
2 // src/Twig/AppExtension.php
3 namespace App\Twig;
4
5 use Some\LipsumGenerator;
6 use Twig\Extension\AbstractExtension;
7 use Twig\TwigFilter;
8 use Twig\TwigFunction;
9
10 class AppExtension extends AbstractExtension
11 {
12 public function getFilters()
13 {
14 return [
15 new TwigFilter('price', [$this, 'filterPrice']),
16 ];
17 }
18
19 public function getFunctions()
20 {
21 return [
22 // appellera la fonction LipsumGenerator:generate()
23 new TwigFunction('lipsum', [LipsumGenerator, 'generate']),
24 ];
25 }
26
27 public function filterPrice($number, $decimals = 0)
28 {
29 $price = number_format($number, $decimals);
30 $price = $price . '€';
31
32 return $price;
33 }
34 }
https://openclassrooms.com/fr/courses/5489656-construisez-un-site-web-a-l-aide-du-framework-symfony-5/5517021-dynamisez-vos-vues-a-l-ai… 6/12
18/07/2022 07:12 Dynamisez vos vues à l’aide de Twig - Construisez un site web à l’aide du framework Symfony 5 - OpenClassrooms
1. Tout d'abord, dans une extension Twig, on peut définir des filtres et/où des fonctions.
2. Ensuite, la déclaration se fait de la même façon : en premier argument, le nom du filtre (ou
de la fonction) et en deuxième argument, l'appel à effectuer. Cet appel peut être une
fonction de la classe que l'on référence avec $this, ou un appel à une autre classe.
3. Grâce à l'autoconfiguration des services, Symfony va automatiquement reconnaître qu'il
s'agit d'une extension Twig et rendre disponibles le filtre "price" et la fonction "lipsum".
Par exemple, imaginons que vous souhaitiez implémenter le système d'alertes du framework CSS
Bootstrap4.
1 {# /templates/macros/alertes.html.twig #}
2 {% macro alert(message, type) %}
3 <div class="alert alert-{{ type }}" role="alert">
4 {{ message }}
5 </div>
6 {% endmacro%}
1 {# /templates/exemple.html.twig #}
2 {% import 'alertes.html.twig' as utils %}
3
4 {{ utils.alert('Attention!', 'warning') }}
5 {{ utils.alert('Erreur fatale!', 'danger') }}
Vous voilà entièrement équipé pour étendre Twig selon vos besoins les plus fous !
Tout au début ce de chapitre, je vous disais que l'héritage de gabarit était l'une des
fonctionnalités les plus utiles de Twig.
1 {# /templates/parent.html.twig #}
2 <html>
3 <head>
4 <title>{% block titre %}Parent{% endblock%}</title>
5 {% block stylesheets %}
6 <link rel="stylesheet" href="styles.css" type="text/css" media="all" />
7 {% endblock %}
8 </head>
9 <body>
10 {% block contenuPrincipal %}
11 Contenu du body
12 {% endblock %}
13 {% block javascripts %}{% endblock %}
14 </body>
15 </html>
1 {# /templates/produit.html.twig #}
2 {% extends 'parent.html.twig' %}
3
https://openclassrooms.com/fr/courses/5489656-construisez-un-site-web-a-l-aide-du-framework-symfony-5/5517021-dynamisez-vos-vues-a-l-ai… 8/12
18/07/2022 07:12 Dynamisez vos vues à l’aide de Twig - Construisez un site web à l’aide du framework Symfony 5 - OpenClassrooms
1 <html>
2 <head>
3 <title>Page Produit</title>
4 <link rel="stylesheet" href="styles.css" type="text/css" media="all" />
5 <link rel="stylesheet" href="produit.css" type="text/css" media="all" />
6 </head>
7 <body>
8 <p>Ceci est la page Produit!</p>
9 <script src="build/produit.js" />
10 </body>
11 </html>
nous avons rendu le titre de la page HTML configurable: par défaut, sa valeur est "Parent" si
le bloc "titre" n'est pas surchargé ;
nous avons rendu le corps de la page configurable, et par défaut, il est vide ;
nous avons rendu l'ajout de fichier CSS et Javascript configurable : dans la page Produit,
nous avons souhaité conserver l'appel au fichier CSS "styles.css" à l'aide de la fonction
parent().
Vous l'aurez compris, plus vous définissez de blocs, plus vos gabarits seront extensibles
grâce à l'héritage !
Console de code
https://openclassrooms.com/fr/courses/5489656-construisez-un-site-web-a-l-aide-du-framework-symfony-5/5517021-dynamisez-vos-vues-a-l-ai… 9/12
18/07/2022 07:12 Dynamisez vos vues à l’aide de Twig - Construisez un site web à l’aide du framework Symfony 5 - OpenClassrooms
Mettez immédiatement en application ce que vous avez
appris.
Vous êtes libre de vous tromper et de réessayer autant que vous
le souhaitez.
JE CODE MAINTENANT !
En résumé
Twig est un moteur de gabarit intégré au framework Symfony, avec une syntaxe claire et
sécurisée par défaut.
Les fonctions sont utiles pour l'intégration de vos pages, par exemple dump dont nous
avons parlé dans un chapitre précédent.
Les filtres sont utiles lorsque vous souhaitez changer l'affichage de vos données, et ils
peuvent être chaînés.
Les macros permettent d'automatiser toutes les tâches d'intégration répétitives qui ne
nécessitent aucun calcul : il faudra importer la macro dans chaque gabarit où vous en
aurez besoin.
Il est possible de créer ses propres fonctions et filtres grâce à l'autoconfiguration du container de
services. Il suffira de créer une classe qui étend AbstractExtension et les extensions seront
disponibles dans vos gabarits.
Enfin, Twig supporte l'héritage : ceci permet de mettre les blocs de vos pages communes (haut
de page, bas de page) dans les gabarits parents et de seulement surcharger des parties
https://openclassrooms.com/fr/courses/5489656-construisez-un-site-web-a-l-aide-du-framework-symfony-5/5517021-dynamisez-vos-vues-a-l-a… 10/12
18/07/2022 07:12 Dynamisez vos vues à l’aide de Twig - Construisez un site web à l’aide du framework Symfony 5 - OpenClassrooms
spécifiques du gabarit. L'intégration devient plus facile, car il y a moins de gabarits à maintenir et
ils sont plus configurables.
Dans le prochain chapitre, vous découvrirez comment interagir avec vos utilisateurs par le biais
de formulaires et ce sera l'occasion d'utiliser Twig dans un exercice pratique. À tout de suite !
Le professeur
Mickaël Andrieu
Consultant et Formateur Web / Data
OPENCLASSROOMS
OPPORTUNITÉS
AIDE
EN PLUS
Français
https://openclassrooms.com/fr/courses/5489656-construisez-un-site-web-a-l-aide-du-framework-symfony-5/5517021-dynamisez-vos-vues-a-l-a… 11/12
18/07/2022 07:12 Dynamisez vos vues à l’aide de Twig - Construisez un site web à l’aide du framework Symfony 5 - OpenClassrooms
https://openclassrooms.com/fr/courses/5489656-construisez-un-site-web-a-l-aide-du-framework-symfony-5/5517021-dynamisez-vos-vues-a-l-a… 12/12