Le cahier des charges

Exercice 1 sur 6 du chapitre 12 · 320 XP · 5 objectifs vérifiés par des tests

Notions abordées : ModélisationEntités et relationsValidationMigrations

Bruna a une idée pour les soirées d'hiver : des soirées de contes. Un conteur, une date, un nombre de places, et des voyageurs qui s'y inscrivent. Gorm en a rédigé le cahier des charges. À vous de construire la fonctionnalité, de bout en bout, sur les six exercices de ce chapitre.

Ce chapitre est le projet final. Les consignes disent quoi faire, plus comment : vous avez tout appris. Les indices sont là si besoin, et la documentation aussi.

Le cahier des charges

Une soirée (App\Entity\Soiree) :

Champ Type Règle (message)
titre texte, 100 caractères obligatoire (« Donnez un titre à la soirée. »)
conteur texte, 60 caractères obligatoire (« Qui raconte ? »)
debut date et heure (DateTimeImmutable) dans le futur (« Une soirée se programme dans le futur. »)
places entier au moins 1 (« Il faut au moins une place. »)
inscriptions ses inscriptions, dans l'ordre d'arrivée

Elle sait dire combien de places il lui reste (getPlacesRestantes()) et si elle est complète (isComplete()). Chaque inscription compte pour ses personnes.

Une inscription (App\Entity\Inscription) :

Champ Type Règle (message)
nom texte, 60 caractères obligatoire (« Indiquez votre nom. »)
email texte, 180 caractères une adresse valide (« Indiquez une adresse valide. »)
personnes entier de 1 à 6 (« De 1 à 6 personnes par inscription. »)
soiree la soirée (obligatoire)
creeLe date et heure, fixée à la création

Une même adresse ne s'inscrit qu'une fois à une soirée (« Vous êtes déjà inscrit à cette soirée. »), mais peut s'inscrire à d'autres.

Chaque propriété a ses accesseurs habituels (getTitre(), setTitre()…), et Soiree::addInscription() rattache l'inscription à la soirée.

Votre mission

  1. Écrivez les deux entités et leurs repositories.
  2. Générez la migration, relisez-la, jouez-la.

Vous pouvez créer les fichiers avec la console (make:entity, doctrine:migrations:diff) ou avec le bouton + de l'explorateur.