Aller au contenu principal

Accessibilité RGAA avec Laravel : le guide PHP

Laravel est le framework PHP le plus populaire, utilisé par des milliers d'applications SaaS, e-commerce et sites vitrine. Ses templates Blade, l'écosystème Livewire pour des SPA server-driven et Inertia pour les combinaisons Vue/React offrent plusieurs chemins d'implémentation, chacun avec ses défis d'accessibilité. Ce guide couvre Laravel 11 et 12, Blade accessible, Livewire 3 et les starters Breeze, Jetstream et Filament.

Laravel et l'accessibilité en 2026

Laravel facilite le développement rapide avec ses starters Breeze et Jetstream, mais ces templates ne sont pas nativement audités RGAA. Livewire 3 améliore l'expérience d'interactions dynamiques tout en gardant le rendu côté serveur, ce qui facilite l'accessibilité. Filament, le panel d'admin populaire, a fait des progrès récents sur l'a11y.

1M+

Apps Laravel en production

60%+

Sites PHP France

Croissante

Livewire 3 adoption

En Bref : L'essentiel à retenir

  • Framework : Laravel nécessite une attention particulière à la sémantique HTML.
  • Point Critique : Gestion du focus lors de la navigation dynamique.
  • Outil Recommandé : Livewire docs a11y.
  • Critères RGAA clés : 7.1, 8.9, 11.1.

Erreurs Fréquentes avec Laravel

Blade directives sans sémantique

Les directives @if @foreach peuvent générer du HTML invalide : balises non fermées, listes sans ul/li, titres hors hiérarchie.

Livewire sans annonces

Les mises à jour Livewire modifient le DOM sans informer les lecteurs d'écran. Un wire:loading ou aria-live est nécessaire.

À éviter
<div>{{ $results }}</div>
Bonne pratique
<div aria-live="polite" aria-busy="@entangle('loading')">{{ $results }}</div>

Forms Blade sans labels

Contrairement à Rails, Blade n'a pas d'helper form.label. Les développeurs oublient souvent les <label for>.

À éviter
<input type="email" name="email">
Bonne pratique
<label for="email">Email</label><input type="email" name="email" id="email">

Breeze/Jetstream non audités

Les templates par défaut de Breeze et Jetstream ont des problèmes connus : focus peu visible, contrastes insuffisants, pas de skip link.

Filament Admin widgets a11y

Filament a progressé mais certains widgets (date picker, select search) ont encore des problèmes clavier.

Bonnes Pratiques Laravel

layout.blade.php structuré

Créez un layout principal avec header, main, nav, footer et skip link. Étendez-le depuis tous vos views via @extends.

Component Blade pour forms

Créez un component <x-input :label="Email" name="email" /> qui génère automatiquement label, input, help text et message d'erreur accessibles.

Livewire wire:loading

Pour chaque action Livewire, ajoutez wire:loading avec un indicator role="status" qui annonce le chargement.

Breeze/Jetstream à personnaliser

Les vues publiées sont éditables. Corrigez le focus visible, les contrastes et ajoutez un skip link avant mise en prod.

Tests avec Pest + axe-core

Intégrez axe-core dans vos tests Pest ou Dusk pour valider l'accessibilité automatiquement en CI.

Critères RGAA clés pour Laravel

Ces critères du référentiel RGAA sont particulièrement importants pour les sites Laravel.

7.1

Scripts

Livewire et Inertia avec focus et annonces

8.9

Landmarks

layout.blade.php avec sémantique HTML5

11.1

Étiquetage

Components Blade générant labels automatiques

11.10

Validation

@error Blade avec aria-describedby

12.7

Lien d'évitement

Skip link dans layout principal

Checklist accessibilité Laravel

Vérifiez ces points essentiels avant de mettre votre site Laravel en production.

  • layout.blade.php avec landmarks HTML5
  • Skip link en début de body
  • Component <x-input> pour forms accessibles
  • Livewire avec wire:loading annoncé
  • Messages d'erreur via @error et aria-describedby
  • Breeze/Jetstream personnalisés pour a11y
  • Filament widgets audités
  • Focus visible dans CSS global
  • Tests Pest + axe-core
  • ESLint jsx-a11y si Inertia Vue/React

Questions Fréquentes sur Laravel et l'accessibilité

Laravel facilite-t-il l'accessibilité ?

Laravel fournit les outils (Blade components, Livewire, Inertia) mais n'impose pas de patterns a11y. La conformité dépend du développeur et des choix de starters. Laravel seul n'est ni plus ni moins accessible que Ruby on Rails ou Django.

Livewire ou Inertia pour l'accessibilité ?

Livewire est plus simple côté a11y : reste server-side, HTML complet, moins d'hydratation. Inertia (Vue/React) demande plus de discipline sur la gestion du focus et des annonces comme dans une SPA classique.

Faut-il auditer les starters Breeze et Jetstream ?

Oui. Ces starters sont rapides mais leurs vues par défaut ne sont pas conformes RGAA (focus peu visible, pas de skip link, contrastes à améliorer). Les vues sont publiées et facilement personnalisables pour corriger ces points.

Auditez votre site Laravel gratuitement

Vérifiez si votre application respecte les 106 critères RGAA en moins de 30 secondes.

Lancer un audit RGAA gratuit