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
- Écrivez les deux entités et leurs repositories.
- 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.