Audit de templates Twig
Périmètre
Analyser le template indiqué ou les templates du dossier templates/. Si aucun périmètre n'est précisé, se concentrer sur les templates modifiés (git diff).
Critères d'analyse
Sécurité (bloquant)
|rawsur des données utilisateur sans sanitization- Variables dans des attributs HTML sans échappement contextuel
- URLs construites à partir de données utilisateur (
href="{{ user_url }}") - Formulaires sans token CSRF (
{{ csrf_token('intention') }}ouform_rest()) - Inclusion de template dynamique (
include(variable)) avec des données non fiables
Performance (important)
- Requêtes Doctrine déclenchées dans le template (lazy loading via des getters de relation)
- Boucles sur des collections non paginées
- Filtres coûteux dans des boucles (
|sort,|filter,|mapsur de grandes collections) - Assets non versionnés (cache busting absent)
- Blocs répétitifs qui pourraient être cachés avec
{% cache %}
Architecture (important)
- Logique métier dans le template (calculs, conditions complexes, formatage avancé). Extraire vers une Twig Extension ou un service
- Template de plus de 200 lignes sans extraction de blocs ou partials
- Duplication de HTML entre templates. Extraire dans un
_partial.html.twigou un Twig Component
Accessibilité (important)
- Images sans attribut
alt - Formulaires sans labels associés aux inputs
- Liens sans texte descriptif
- Hiérarchie de headings cassée (h1 puis h3 sans h2)
- Éléments interactifs non accessibles au clavier
- Tableaux sans
<thead>,<th>, ouscope
Bonnes pratiques Twig
- Utiliser
{{ path('route_name') }}au lieu de URLs en dur - Utiliser
{{ asset('path') }}pour les fichiers statiques - Utiliser
|transpour les chaînes (i18n-ready) - Préférer les Twig Components aux macros pour les éléments réutilisables
form_rest(form)à la fin de chaque formulaire- Nommage des blocs : explicite et cohérent
Structure des templates
- Héritage : un template de base (
base.html.twig), des layouts intermédiaires si nécessaire - Nommage :
entity/action.html.twigcohérent avec les routes - Partials préfixés par
_:_navbar.html.twig,_sidebar.html.twig
Format de sortie
Pour chaque problème :
- Fichier et ligne
- Catégorie (sécurité, performance, accessibilité, bonnes pratiques)
- Sévérité
- Code problématique
- Code corrigé
Résumé en fin d'audit avec le nombre de problèmes par catégorie.