Retirer un plat

Exercice 5 sur 6 du chapitre 3 · 180 XP · 5 objectifs vérifiés par des tests

Notions abordées : SuppressionCSRFremove

Le « Pain du voyageur » ne se vend plus depuis que Legolas a raconté partout qu'il faisait dormir trois jours. Bruna veut le retirer de la carte.

Supprimer, c'est modifier des données : jamais avec un simple lien (un robot qui explore le site, ou une image piégée sur un autre site, suffiraient à tout effacer). On passe par un formulaire POST, protégé par un jeton CSRF.

Votre mission

  1. Ajoutez à CuisineController une action supprimerPlat() sur /cuisine/plat/{slug}/supprimer (route app_supprimer_plat), en POST uniquement :
    • vérifiez le jeton CSRF envoyé dans le champ _token ; s'il est invalide, refusez avec une erreur 403 ;
    • supprimez le plat, ajoutez le message flash « « Nom du plat » a quitté la carte. », puis redirigez vers la carte.
  2. Sur la fiche, ajoutez un petit formulaire POST vers cette action, avec le jeton en champ caché et un bouton « Retirer de la carte ».

Le jeton doit être propre au plat : utilisez un identifiant de jeton qui contient l'id du plat ('supprimer-plat-' ~ plat.id).

Les avis du plat partent avec lui : c'est configuré dans le mapping (cascade: ['remove']).

Rappel

Les formulaires de Symfony gèrent le CSRF tout seuls. Pour un formulaire écrit à la main, on utilise csrf_token() dans Twig et isCsrfTokenValid() dans le contrôleur.