Découverte de Twig

Twig est un moteur des templates pour PHP, sa syntaxe est inspirée de Jinja et Django, c’est un produit open source. Twig est le moteur de templates présent dans le célèbre Framework Symfony mais c’est possible d’utiliser sans Symfony.

  1. Intérêt :

Les templates vont nous permettre de séparer le code PHP du code HTML/XML/Text, etc. Seulement, pour faire du HTML de présentation, on a toujours besoin d’un peu de code dynamique. Pour faciliter ce code dynamique dans les templates, le moteur de templates Twig offre son pseudo-langage à lui. Ce n’est pas du PHP, mais c’est plus adapté et voici pourquoi :

  • La syntaxe est plus concise et plus claire, pour afficher une variable, {{ mavar }} suffit, alors qu’en PHP il faudrait faire <?php echo $mavar; ?>.
  • Il y a quelques fonctionnalités en plus, comme l’héritage de templates (include).
  • Il sécurise les variables automatiquement : plus besoin de se soucier de htmlentities(), addslashes().
  • Le code est plus clair : on sait où est le code HTML et on ne doit pas chercher après dans le code PHP si un jour on veut modifier simplement l’affichage d’une page, on sait quelle partie du code éditer et on a pas besoin à chercher.
  1. Utilisation :

Première chose à savoir sur Twig : on peut afficher des variables et on peut exécuter des expressions…

  • {{ … }} affiche quelque chose.
  • {% … %} fait quelque chose.
  • {# … #} n’affiche rien et ne fait rien : c’est la syntaxe pour les commentaires, qui peuvent être sur plusieurs lignes.

Dans la suite on va voir comment utiliser Twig :

    1. Afficher les variables

Afficher une variable se fait avec les doubles accolades « {{ … }} ». Voici quelques exemples.

Description

Exemple Twig

Équivalent PHP

Afficher une variable Pseudo : {{ pseudo }} Pseudo : <?php echo $pseudo; ?>
Afficher l’index d’un tableau Identifiant : {{ user[‘id’] }} Identifiant : <?php echo $user[‘id’]; ?>
Afficher l’attribut d’un objet, dont le getter respecte la convention $objet->getAttribut() Identifiant : {{ user.id }} Identifiant : <?php echo $user->getId(); ?>
Afficher une variable en lui appliquant un filtre. Ici, « upper » met tout en majuscules : Pseudo en majuscules : {{ pseudo|upper }} Pseudo en lettre majuscules : <?php echo strtoupper($pseudo); ?>
Afficher une variable en combinant les filtres.
« striptags » supprime les balises HTML.
« title » met la première lettre de chaque mot en majuscule.
Notez l’ordre d’application des filtres, ici
 striptags est appliqué, puis title.
Message : {{ news.texte|striptags|title }} Message : <?php echo ucwords(strip_tags($news->getTexte())); ?>
Utiliser un filtre avec des arguments.
Attention, il faut que
 date soit un objet de type Datetime ici.
Date : {{ date|date(‘d/m/Y’) }} Date : <?php echo $date->format(‘d/m/Y’); ?>
Concaténer Identité : {{ nom ~ ’ ‘~ prenom }} Identité : <?php echo $nom.’ ‘.$prenom; ?>

 

Il y’a des filtres disponibles nativement avec Twig, en voici quelques-uns

Filtre

Description

Exemple Twig

Upper Met toutes les lettres en majuscules. {{ var|upper }}
Striptags Supprime toutes les balises XML. {{ var|striptags }}
Date Formate la date selon le format donné en argument. La variable en entrée doit être une instance de Datetime. {{ date|date(‘d/m/Y’) }}
Date d’aujourd’hui : {{ « now »|date(‘d/m/Y’) }}
Format Insère des variables dans un texte, équivalent àprintf. {{ « Il y a %s pommes et %s poires »|format(153, nb_poires) }}
Length Retourne le nombre d’éléments du tableau, ou le nombre de caractères d’une chaîne. Longueur de la variable : {{ texte|length }}
Nombre d’éléments du tableau : {{ tableau|length }}

 

    1. Structures de contrôle et expressions

on a vu comment afficher quelque chose, maintenant on va voir comment manipuler les output avec la syntaxe {% … %}.

  1. Condition : {% if %}

Twig

PHP

 

  1. Boucle : {% for %}

Twig

PHP

 

Et pour avoir accès aux clés du tableau

Twig

PHP

 

la structure {% for %}, celle-ci définit une variable {{ loop }} au sein de la boucle, qui contient les attributs suivants :

Variable

Description

{{ loop.index }} Le numéro de l’itération courante (en commençant par 1).
{{ loop.index0 }} Le numéro de l’itération courante (en commençant par 0).
{{ loop.revindex }} Le nombre d’itérations restantes avant la fin de la boucle (en finissant par 1).
{{ loop.revindex0 }} Le nombre d’itérations restantes avant la fin de la boucle (en finissant par 0).
{{ loop.first }} true si c’est la première itération, false sinon.
{{ loop.last }} true si c’est la dernière itération, false sinon.
{{ loop.length }} Le nombre total d’itérations dans la boucle.

 

  1. {% set %}

Twig

PHP

 

  1. Des test utiles :il existe plusieurs tests qu’on peut faire avec Twig, parmi ces test on cite (par exemple):
    1. Defined

Twig

PHP

 

    1. Even/odd

Twig

PHP

 

    1. Hériter et inclure des templates

Si on a un Template père qui contient le design de notre site qui contient des blocks à remplir, donc les templates fils vont hériter du père en remplaçant certains éléments par leur propre contenu.

Pour hériter d’un Template on utilise la technique include().