← Symfony 8.0 — architecture et préparation certification

Module 6 / 8 · 90 min

Twig, traduction et sérialisation de présentation

Rendre des données sans confondre texte, code et contexte.

Votre progression apparaîtra ici lorsque JavaScript est actif.

La progression et le meilleur score sont enregistrés uniquement dans ce navigateur. Aucun compte n’est nécessaire ; effacer les données du navigateur les supprime. Les durées de modules sont indicatives et incluent les exercices.

Comprendre le mécanisme

Twig sépare la présentation et la logique applicative. Les blocs composent un héritage de templates ; include réutilise une partie de rendu. L’échappement automatique évite d’interpréter comme HTML une donnée rendue dans le contexte concerné. raw désactive cette protection : sa présence doit correspondre à un contenu réellement maîtrisé. Un filtre ne fournit pas une protection universelle pour tous les contextes JavaScript ou URL.

Raisonner et vérifier

Les clés de traduction sont résolues selon domaine et locale, avec repli prévu. Les messages comportant des nombres peuvent nécessiter un format de pluralisation adapté. Conservez les textes traduisibles séparés des identifiants métier. Pour une sortie JSON, utilisez les outils de sérialisation adaptés, groupes et normalisation au besoin ; évitez de rendre toutes les propriétés d’un objet sensible par commodité.

Contexte de sortie

L’échappement automatique dépend du contexte Twig configuré. Les sorties HTML, JavaScript et URL ont des contraintes différentes. Le texte HTML, un attribut, une URL et du JavaScript ne suivent pas les mêmes règles. Conservez les données dans le contexte prévu et vérifiez le DOM produit avec une valeur contenant guillemets et chevrons.

Erreur fréquente à comprendre

Toute variable Twig est sûre dans tout contexte possible.

Les sorties HTML, JavaScript et URL ont des contraintes différentes.

Retrait par raw

raw retire une protection d’échappement. La donnée doit déjà suivre une politique de contenu adaptée. Afficher une biographie contrôlée par un visiteur avec raw transforme du balisage en contenu actif. Si du HTML est nécessaire, appliquez une politique de nettoyage explicite adaptée à cet usage avant affichage.

Erreur fréquente à comprendre

raw rend automatiquement fiable tout contenu utilisateur.

La donnée doit déjà suivre une politique de contenu adaptée.

Domaine et locale

Les traductions ont un domaine et une locale. La présentation n’accorde pas les droits. Une clé peut exister dans messages mais manquer dans validators. Vérifiez le domaine demandé et le repli linguistique au lieu d’ajouter la même clé dans tous les catalogues sans comprendre la résolution.

Erreur fréquente à comprendre

Un texte traduit décide des permissions serveur.

La présentation n’accorde pas les droits.

Paramètres et messages

Les paramètres de traduction peuvent porter des données. Le contexte de rendu doit garder la séparation données/code. Un prénom injecté dans une traduction reste une donnée. Ne construisez pas une chaîne HTML de confiance par concaténation puis raw ; vérifiez les paramètres et les choix de pluralisation du moteur utilisé.

Erreur fréquente à comprendre

Toute valeur interpolée devient du code fiable.

Le contexte de rendu doit garder la séparation données/code.

Clés absentes

Une clé manquante doit être détectée par les vérifications. Il peut s’agir d’un repli sans message disponible. Une interface peut rester techniquement valide en affichant sa clé de traduction. Ajoutez des assertions sur les libellés importants et le repli attendu afin de détecter les erreurs visibles sans exception PHP.

Erreur fréquente à comprendre

Une page affichant une clé prouve une traduction complète.

Il peut s’agir d’un repli sans message disponible.

Héritage et blocs

Une extension de template peut séparer des blocs. Le mécanisme permet de spécialiser certains blocs. Un template enfant remplace des blocs du parent. Gardez une structure commune pour navigation et sécurité des attributs ; vérifiez qu’une surcharge ne retire pas silencieusement un formulaire ou une information obligatoire.

Erreur fréquente à comprendre

Tout template enfant doit dupliquer intégralement le parent.

Le mécanisme permet de spécialiser certains blocs.

Macros explicites

Les macros ont une portée et des arguments explicites. Les dépendances du rendu doivent être passées correctement. Passez le sujet et la locale nécessaires comme arguments de macro. Cette signature rend les dépendances visibles et évite qu’une réutilisation dans un autre contexte dépende accidentellement de variables disponibles ailleurs.

Erreur fréquente à comprendre

Une macro voit nécessairement tout état local de l’appelant.

Les dépendances du rendu doivent être passées correctement.

Liens et destination

Une URL doit être générée et validée selon son usage. Le contenu de destination demande aussi une politique. Générez les chemins internes par nom de route. Une destination externe issue d’une entrée doit encore être admise selon sa politique ; l’échappement HTML d’un lien ne rend pas son schéma acceptable.

Erreur fréquente à comprendre

Échapper une URL suffit à autoriser tout schéma.

Le contenu de destination demande aussi une politique.

Langue annoncée

Un contenu de cours français peut avoir une interface anglaise annoncée. Le contenu et les messages d’interface ont des sources différentes. Une interface anglaise peut présenter un cours français si ce choix est indiqué. Testez navigation, attribut lang et liens localisés, afin que l’apprenant connaisse la langue du contenu avant de commencer.

Erreur fréquente à comprendre

Changer la locale traduit automatiquement tout texte stocké en JSON.

Le contenu et les messages d’interface ont des sources différentes.

Contrat de présentation

Les tests doivent vérifier le texte et les attributs rendus. La syntaxe ne couvre pas l’ensemble de l’interface. Pour une API utilisateur, un DTO ou des groupes de sérialisation exposent les champs utiles. Vérifiez que hash de mot de passe, token interne et données de tiers n’apparaissent jamais dans le contrat rendu.

Erreur fréquente à comprendre

Un lint Twig prouve tout comportement interactif navigateur.

La syntaxe ne couvre pas l’ensemble de l’interface.

Atelier guidé : lire, expliquer et vérifier le code

<article>
  {{ body|raw }}
</article>

L’atelier retire l’échappement d’une valeur potentiellement contrôlée par un utilisateur. Injectez un exemple de balisage inoffensif dans un test local et observez le DOM. La correction doit afficher le texte attendu ou un HTML nettoyé selon une politique explicite. Contrôlez également les attributs et la sérialisation, pas seulement le texte visible.

Le filtre n’est pas un assainisseur universel. raw retire une protection au lieu d’ajouter une insertion textuelle. Le filtre de rendu ne décide pas du droit d’accès. Un contenu actif peut être interprété si aucune politique adaptée n’a été appliquée.

Travail pratique : Ajoutez un libellé contenant <script> puis vérifiez sa représentation ; rendez aussi une page en deux locales.

Critères de correction : Vérifiez le texte obtenu et l’absence de balise interprétée. Testez les liens localisés et le repli d’une clé. N’utilisez pas raw pour faire disparaître un problème de format.

Exemple commenté

{# Template Twig de laboratoire #}
{% extends 'base.html.twig' %}
{% block body %}
  <h1>{{ reservation.label }}</h1>
  <a href="{{ path('app_training') }}">{{ 'catalogue.title'|trans({}, 'training') }}</a>
{% endblock %}

Le libellé est échappé lors du rendu HTML. Le lien est généré par le routeur et le texte de navigation par le traducteur.

Exercice de mise en pratique

Ajoutez un libellé contenant <script> puis vérifiez sa représentation ; rendez aussi une page en deux locales.

Voir une proposition de correction

Vérifiez le texte obtenu et l’absence de balise interprétée. Testez les liens localisés et le repli d’une clé. N’utilisez pas raw pour faire disparaître un problème de format.

Points de vérification

  • Éviter raw sur une entrée utilisateur.
  • Tester domaines et locales.
  • Limiter explicitement les données sérialisées.

Contrôle de connaissances

Cours associé : Twig, traduction et sérialisation de présentation ↗
Quel filtre désactive l’échappement Twig et exige une confiance particulière ?

Documentation de référence ↗

Validation du module

101 questions, objectif pédagogique de 75 %. Durée conseillée de 150 minutes, sans limite imposée. Les questions et les choix sont mélangés ; le corrigé apparaît après validation. Le contrôle rapide de la leçon et l’examen final du cours restent des exercices distincts.

Commencer ou reprendre les 101 questions →