Partie 9 — Formulaires, validation & upload
Public : BookLab a un back-office (Partie 7) rendu réactif (Partie 8). Il manque le moyen propre de collecter et valider des données saisies : les formulaires. Objectif de la partie : maîtriser le composant Form de Symfony, le brancher sur des entités ou des DTO, appliquer la validation (contraintes), thémer les formulaires, et gérer l’upload de fichiers (avec Flysystem/S3). La validation acquise ici sert aussi l’API (Partie 11).
Ce que vous saurez faire à la fin de cette partie
- Construire des FormType réutilisables et les lier à une entité ou un DTO.
- Traiter une soumission (
handleRequest) et gérer les erreurs. - Écrire des règles de validation avec les attributs
#[Assert\...](et des contraintes personnalisées). - Thémer les formulaires (Bootstrap/Tailwind) et personnaliser le rendu.
- Gérer l’upload de fichiers proprement (VichUploader, stockage Flysystem/S3).
Le point clé pour l’architecture BookLab
La validation que vous écrivez ici (contraintes sur des DTO) est la même qui protège l’API consommée par Next.js (via #[MapRequestPayload], Partie 4.4, et API Platform, Partie 11). Formulaires HTML (back-office) et API JSON (front Next.js) partagent les règles métier. On valide une fois, on protège les deux entrées.
Chapitres de cette partie
- Le composant Form —
FormType, champs, options, rendu de base, cyclehandleRequest. - Formulaires liés aux entités & aux DTO —
data_class, mapping, DTO d’entrée vs entité directe,POST/Redirect/GET. - La validation — contraintes
#[Assert\...], groupes, validation côté serveur, contraintes personnalisées. - Thématiser les formulaires — form themes, Bootstrap/Tailwind, rendu champ par champ, erreurs.
- Upload de fichiers — champ
FileType, VichUploader, stockage Flysystem/S3, sécurité des uploads.
Prochain chapitre : 9.1 — Le composant Form.