Symfony : – Le Twig

Twig est un langage de templating puissant, conçu pour gérer efficacement la couche de présentation dans une application Symfony. Il propose une syntaxe simple et intuitive pour travailler avec des variables, des boucles, des conditions, et plus encore, tout en offrant des mécanismes robustes pour la sécurité et l’organisation des templates.

Les différents instructions

Twig propose trois principaux types de notations pour structurer ses templates :

  1. Instructions logiques ({% ... %}) :
    • Ces instructions servent à exécuter des actions ou à définir des blocs.
    • Exemple :
      {% extends 'base.html.twig' %}
      {% block title %}Mon Titre{% endblock %}
      
  2. Expressions d’affichage ({{ ... }}) :
    • Utilisées pour afficher des données ou des résultats calculés.
    • Exemple :
      {{ titre }}
      {{ parent() }}
      
  3. Commentaires ({# ... #}) :
    • Permettent d’ajouter des remarques non visibles dans le code généré.
    • Exemple :
      {# Ce commentaire sera ignoré lors du rendu #}
      

Manipulation des variables

a) Passer des variables depuis le contrôleur

Dans Symfony, les variables sont passées aux templates via le deuxième paramètre de la méthode render().

Exemple dans un contrôleur :

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;

class DefaultController extends AbstractController
{
    #[Route("/")]
    public function index(): Response
    {
        return $this->render(
            'default/index.html.twig',
            [
                'titre' => 'Bienvenue à tous',
                'bonjours' => ['Hello', 'Bonjour', 'Hallo'],
            ]
        );
    }
}

Template correspondant :

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

{% block title %}
    {{ titre }}
{% endblock %}

{% block body %}
    {% for bonjour in bonjours %}
        {{ bonjour }}<br />
    {% endfor %}
{% endblock %}

HTML généré :

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>Bienvenue à tous</title>
    </head>
    <body>
        Hello<br />
        Bonjour<br />
        Hallo<br />
    </body>
</html>

b) Travailler avec des tableaux et objets

Twig permet d’accéder facilement aux propriétés des tableaux et des objets à l’aide de la notation pointée (.).

Exemple :

{{ produit.nom }}
{{ utilisateur.adresse.ville }}

Twig suit cette priorité pour accéder à une valeur :

  1. $variable['valeur'] si l’objet implémente ArrayAccess.
  2. $variable->valeur (propriété publique).
  3. $variable->valeur() (méthode).
  4. $variable->getValeur() ou $variable->isValeur().

Structures de contrôle et boucles

a) Les conditions

Twig prend en charge les structures conditionnelles de type if / elseif / else.

Exemple :

{% if langue == 'fr' %}
    Bienvenue!
{% elseif langue == 'de' %}
    Willkommen!
{% else %}
    Welcome!
{% endif %}

b) Les boucles

Twig permet de parcourir des tableaux ou objets implémentant Traversable via l’instruction for.

Exemple simple :

{% for produit in produits %}
    {{ produit.nom }}<br />
{% endfor %}

Avec clé et valeur :

{% for cle, valeur in tableau %}
    {{ cle }} : {{ valeur }}<br />
{% endfor %}

Gestion des tableaux vides :

{% for item in liste %}
    {{ item }}<br />
{% else %}
    Aucun élément à afficher.
{% endfor %}

Attributs spéciaux dans les boucles :

  • loop.index : Index de l’itération (commence à 1).
  • loop.first : true pour la première itération.
  • loop.last : true pour la dernière itération.

Les balises Twig (tags)

Les tags sont des instructions avancées de Twig, utilisées pour définir des variables, inclure des templates, ou contrôler l’échappement des données.

a) Créer des variables avec set

{% set titre = 'Page d\'accueil' %}
{% set tableau = [1, 2, 3] %}
{% set tableau_associatif = {'clé': 'valeur'} %}

b) Échappement des données

Twig échappe automatiquement les variables pour éviter les injections de code.

Exemple :

{% set titre = '<h1>Page sécurisée</h1>' %}
{{ titre }} {# Affichera les balises comme texte #}

Pour désactiver cet échappement :

{{ titre|raw }}

Inclure des templates

Twig permet de factoriser du contenu répétitif en utilisant l’inclusion de templates.

Exemple d’inclusion :

{{ include('header.html.twig') }}

Vous pouvez aussi transmettre des variables spécifiques :

{{ include('header.html.twig', {'titre': 'Mon Site'}) }}

Pour restreindre l’accès au contexte du template appelant :

{{ include('header.html.twig', with_context = false) }}

Rendu conditionnel avec des filtres

Twig permet d’ajouter des filtres pour transformer les données avant leur affichage.

Exemple de filtres :

{{ texte|upper }}  {# Convertir en majuscules #}
{{ montant|number_format(2, ',', ' ') }} {# Format numérique #}

  1. Documentation Twig officielle
  2. Cheatsheet Twig
  3. Documentation Symfony sur les templates

Le langage Twig offre une syntaxe puissante et intuitive pour structurer et enrichir les vues de vos applications Symfony. Grâce à ses fonctionnalités avancées comme les boucles, les conditions, les tags, et les inclusions, il permet de créer des interfaces web dynamiques tout en respectant les principes de sécurité et de maintenabilité.

Sites Ressources e-Plus Pour Laravel 11

1. Packagist Description : Le principal dépôt de packages PHP, avec une catégorie spécifique pour Laravel. Lien : https://packagist.org Ressources :...