Le slug qui s'écrit tout seul

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

Notions abordées : Écouteurs Doctrine#[AsEntityListener]prePersistSluggerInterface

Le slug d'un plat (ragout-du-nain, dans /plat/ragout-du-nain) se calculait dans le contrôleur de la cuisine. Mais les plats arrivent aussi par les commandes, par le festin du vendredi, par les tests… et à chaque fois, quelqu'un doit penser au slug. Pipin a oublié une fois : plat enregistré, erreur SQL, soirée gâchée.

Il a donc retiré le calcul du contrôleur. Désormais, c'est à Doctrine de s'en occuper.

Les événements de Doctrine

Doctrine aussi annonce ce qu'il fait : prePersist (juste avant d'insérer une entité), preUpdate, postRemove… Un écouteur d'entité réagit à ces événements pour une classe précise. Le slug est alors garanti, d'où que vienne le plat.

Votre mission

Complétez SlugDuPlat :

  1. un plat enregistré sans slug en reçoit un, tiré de son nom (« Tourte aux Pommes » donne tourte-aux-pommes) ;
  2. accents et ponctuation disparaissent (« Crème brûlée à l'Œuf » donne creme-brulee-a-l-oeuf) ;
  3. un slug choisi à la main est respecté : ceux de la carte (ragout-du-nain) ne changent pas ;
  4. deux plats ne partagent jamais un slug : ragout, puis ragout-2, puis ragout-3 ;
  5. la cuisine fonctionne de nouveau.

Pour essayer : connectez-vous avec bruna@dragon-ivre.fr / marmite et inventez un plat.