User Tools

Site Tools


backend:twigbase

Twig : Bases

logo

Site référence

Présentation

Twig est un moteur de templates pour le langage de programmation PHP, utilisé par défaut par le framework Symfony. Il a été inspiré par Jinja, moteur de template Python2.

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 : faire une boucle pour afficher toutes les annonces de notre plateforme, créer des conditions pour afficher un menu différent pour les utilisateurs authentifiés ou non, etc. Pour faciliter ce code dynamique dans les templates, le moteur de templates Twig offre son pseudo-langage à lui.

Les templates peuvent (et doivent) être utilisés partout. Quand on enverra des e-mails, leurs contenus seront placés dans un template. Ainsi, en récupérant le contenu du template dans une variable quelconque, on pourra le passer à la fonction mail de notre choix.
Mais il en va de même pour un flux RSS par exemple ! Si l'on sait afficher une liste des news de notre site en HTML grâce au template newsList.html.twig, alors on saura afficher un fichier RSS en gardant le même contrôleur, mais en utilisant le templatenewsList.rss.twig à la place.

Il faut transformer le langage Twig en PHP avant de l'exécuter pour, finalement, afficher notre contenu. Mais Twig ne le fait que la première fois et met en cache du code PHP simple afin que, dès la deuxième exécution de votre page, ce soit en fait aussi rapide que du PHP simple.

Fonctionnalités

  • Contrôle de flux complexe
  • Echappement automatique
  • Héritage des templates
  • Filtres variables
  • Internationalisation (via gettext)
  • Macros
  • Langage extensible

Syntaxe

Définition de la syntaxe

Syntaxe Définition
{{ … }}appel à une variable ou une fonction PHP, ou un template Twig parent ({{ parent() }})
{# … #}commentaires
{% … %}commande, comme une affectation, une condition, une boucle ou un bloc HTML
{% set foo = 'bar' %}assignation
{% if i is defined and i == 1 %} … {% endif %}condition
{% for i in 0..10 %} … {% endfor %}compteur dans une boucle
'caractère d'échappement

Le commentaires nes sont pas visibles dans le code source de la page contrairement au HTML

Pour créer un tableau itératif :

{% set myArray = [1, 2] %}

Un tableau associatif :

{% set myArray = {'key': 'value'} %}

Précédence des opérateurs

Du moins prioritaire au plus prioritaire :

Opérateur Rôle
b-and Et booléen
b-xor Ou exclusif
b-or Ou booléen
or Ou
and Et
== Est-il égal
!= Est-il différent
< Inférieur
> Supérieur
>= Supérieur ou égal
Inférieur ou égal
in Dans
matches Correspond
starts with Commence par
ends with Se termine par
.. Séquence (ex : 1..5)
+ Plus
- Moins
~ Concaténation
* Multiplication
/ Division
// Division arrondie à l'inférieur
% Modulo
is Test (ex : is defined ou is not empty)
** Puissance
| Filtre
[] Entrée de tableau
. Attribut ou méthode d'un objet (ex : country.name)

Filtres

Les filtres fournissent des traitements sur une expression, si on les place après elle séparés par des pipes. Par exemple :

  • capitalize : met une majuscule à la première lettre d'une chaine de caractères.
  • upper : met la chaîne en lettres capitales.
  • first : affiche la première ligne d'un tableau.
  • length : renvoie la taille de la variable.

Variables globales

Symfony enregistre par défaut une variable globale {{ app }} dans Twig. Voici la liste de ses attributs, qui sont donc disponibles dans tous les templates :

Syntaxe Définition
{{ app.request }} Requête
{{ app.session }} Session
{{ app.environment }} Environnement courant : « dev », « prod », et ceux que vous avez définis.
{{ app.debug }} true si le mode debug est activé, false sinon.
{{ app.user }} Utilisateur courant
{{ app.flashes('xxx') }} Messages flashes stockés dans la session.

On peut enregistrer nos propres variables globales, pour qu'elles soient accessibles depuis tous nos templates, au lieu de les injecter à chaque fois depuis le contrôleur.
On sépare la valeur du paramètre, stockée dans un fichier simple dans le répertoire config, de l'utilisation de ce paramètre, le fichier de configuration dans le répertoire env à la racine du projet.

Récupération de la route courante

Avec à la méthode get() et la variable globale app.request , on peut accéder à la route courrante :

{{ app.request.get('_route') }}

Variables spéciales

  • loop contient les informations de la boucle dans laquelle elle se trouve. Par exemple loop.index donne le nombre d'itérations déjà survenue.
  • Les variables globales commencent par des underscores, par exemple :
    • _route (partie de URL située après le domaine)
    • _self (nom de du fichier courant)

Donc, pour obtenir la route d'une page :

{{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')) }}
  • Les variables d'environnement CGI, telles que
{{ app.request.server.get('SERVER_NAME') }}

Les variables d'environnement CGI sont des variables transmises à un programme CGI (Common Gateway Interface “Interface de passerelle commune” est une interface utilisée par les serveurs HTTP), par le serveur Web l'invoquant, lors de son exécution.
Elles fournissent des informations sur la requête effectuée par le client, sur le serveur et également sur le client lui-même. Par exemple, lorsqu'on effectue une recherche sur un site qui fonctionne avec des CGI, le script récupérera les termes de la recherche avec la variable d'environnement « QUERY_STRING »

Sécurité

Twig applique par défaut un filtre sur toutes les variables affichées, afin de les protéger de balises HTML. Il est donc inutile de protéger les variables en amont.

Si on veut afficher une variable qui contient du code (HTML, JavaScript, etc.), il faut utiliser le filtre raw.
Avec ce filtre, Twig désactive localement la protection HTML, et affiche la variable en brut, quel que soit ce qu'elle contient.

{{ ma_variable_html|raw }}
backend/twigbase.txt · Last modified: 2020/09/16 10:35 (external edit)