Déboguer une application Symfony : de l'erreur au bug silencieux
Déboguer une application Symfony, c'est remonter d'un symptôme au code fautif avec la page d'erreur, sa pile d'appels et les commandes de la console.
// Aucune erreur : le message s'affiche, la page se redirige… et la base reste vide. if ($form->isSubmitted() && $form->isValid()) { $entityManager->persist($plat); // Il manque : $entityManager->flush(); $this->addFlash('success', sprintf('« %s » est à la carte !', $plat->getNom())); return $this->redirectToRoute('app_menu'); }
Une erreur bruyante se lit sur la page d'exception : le titre donne le type et le message, la pile d'appels mène au premier fichier qui n'est pas dans vendor/. Les bugs silencieux demandent d'autres témoins. doctrine:schema:validate repère un mapping incohérent, dbal:run-sql montre ce qui est vraiment en base, debug:router, debug:container, debug:event-dispatcher ou debug:messenger disent comment Symfony a assemblé l'application, et le code de sortie d'une commande dit ce qu'un script en comprend. Le piège : croire qu'une page qui s'affiche est une page juste. Un persist() sans flush(), comme ci-dessus, ne lève rien ; seule la base montre que rien n'a été enregistré.
Les exercices sont des combats de boss : Pipin a « amélioré » la taverne, et il faut trouver trois ou quatre bugs à partir des seuls symptômes. On y croise une route renommée, une relation mal nommée, un jeton CSRF qui ne correspond plus, une règle access_control trop large, un message Messenger perdu, une migration dont l'annulation vide une table, un workflow mal décrit et une commande qui annonce un succès trompeur.
10 exercices font travailler cette notion, en écrivant du code dans le navigateur.
Dans les parcours
- 🐉 Boss : incident en cuisine Symfony pour les devs PHP · chapitre 1 : Premiers pas à la taverne
- 🐉 Boss : la cave inondée Symfony pour les devs PHP · chapitre 2 : La cave et le garde-manger
- 🐉 Boss : le parchemin maudit Symfony pour les devs PHP · chapitre 3 : Les parchemins de la taverne
- 🐉 Boss : les clés volées Symfony pour les devs PHP · chapitre 4 : Les clés de la taverne
- 🐉 Boss : le pigeon égaré Symfony pour les devs PHP · chapitre 5 : Les parchemins magiques
- 🐉 Boss : la volière en panne Symfony pour les devs PHP · chapitre 7 : Le corbeau messager
- 🐉 Boss : le cellier effondré Symfony pour les devs PHP · chapitre 8 : Retour à la cave
- 🐉 Boss : la taverne à l'envers Symfony pour les devs PHP · chapitre 9 : Les rouages de la taverne
- 🐉 Boss : les parchemins égarés Symfony pour les devs PHP · chapitre 10 : La vie d'une réservation
- 🐉 Boss : les ordres mal compris Symfony pour les devs PHP · chapitre 11 : Les ordres du patron
Notions voisines
FormulaireCSRFaccess_controlVoterPare-feu#[Groups]MessengerScheduler