La Taverne du Dragon Ivre
Symfony pour les devs PHP
Vous maîtrisez PHP et la POO ? Apprenez Symfony en construisant, chapitre après chapitre, le site de la Taverne du Dragon Ivre.
74 exercices 12 chapitres 17 820 XP Environ 47 h de pratique
79,00 € 49,00 € TTC, accès à vie
Prix fondateur encore 99 places.
Acheter le parcoursPremier chapitre gratuit avec un compte.
01
Premiers pas à la taverne
Gratuit
- Exercice 1 : La taverne ouvre ses portes Notions abordées ContrôleurRouteTwig
- Exercice 2 : Le plat du jour Notions abordées Paramètre de route404
- Exercice 3 : Les prix en pièces d'or Notions abordées Boucle TwigFiltresConditions
- Exercice 4 : Une enseigne commune Notions abordées Héritage Twigincludepath()
- Exercice 5 : Combien d'aventuriers ? Notions abordées Query string#[MapQueryParameter]Validation
- Exercice 6 : La réservation Notions abordées POSTRedirectionMessages flash
- Exercice 7 : Le chef cuisinier Notions abordées ServiceAutowiringInjection de dépendances
- Exercice final : 🐉 Boss : incident en cuisine Notions abordées DébogagePages d'erreurProfiler
-
Fiche de cours du chapitre
02
La cave et le garde-manger
🔒 Parcours complet
- Exercice 1 : Le grand livre de Bruna Notions abordées EntitéMappingDoctrine
- Exercice 2 : La carte sort de la base Notions abordées RepositoryInjection de dépendancesCommande console
- Exercice 3 : Une requête sur mesure Notions abordées QueryBuilderDQLParamètres
- Exercice 4 : Bruna invente un plat Notions abordées persistSlugger
- Exercice 5 : Chaque plat à sa place Notions abordées ManyToOneOneToManyRelations
- Exercice final : 🐉 Boss : la cave inondée Notions abordées Débogageschema:validate
-
Fiche de cours du chapitre
03
Les parchemins de la taverne
🔒 Parcours complet
- Exercice 1 : Un formulaire digne de ce nom Notions abordées FormulaireFormTypeEntityTypeCSRF
- Exercice 2 : Pas n'importe quoi dans l'assiette Notions abordées ValidatorContraintesUniqueEntity
- Exercice 3 : Bruna corrige sa carte Notions abordées Formulaire d'éditionRoute {slug:plat}
- Exercice 4 : Le livre d'or Notions abordées FormulaireRelationsPOST-redirection-GET
- Exercice 5 : Retirer un plat Notions abordées SuppressionCSRFremove
- Exercice final : 🐉 Boss : le parchemin maudit Notions abordées DébogageFormulaireCSRF
-
Fiche de cours du chapitre
04
Les clés de la taverne
🔒 Parcours complet
- Exercice 1 : Qui va là ? Notions abordées Pare-feuform_loginaccess_control
- Exercice 2 : Le registre des employés Notions abordées UserInterfaceProvider entityHachage
- Exercice 3 : À chacun son rôle Notions abordées role_hierarchyIsGrantedis_granted()
- Exercice 4 : Chacun ses plats Notions abordées VoterIsGranted avec sujetCurrentUser
- Exercice 5 : Changer la serrure Notions abordées UserPasswordRepeatedTypeHachage
- Exercice final : 🐉 Boss : les clés volées Notions abordées Débogageaccess_controlHiérarchie des rôlesVoter
-
Fiche de cours du chapitre
05
Les parchemins magiques
🔒 Parcours complet
- Exercice 1 : La carte sur parchemin Notions abordées API JSON$this->json()Serializer#[Groups]
- Exercice 2 : Un plat à la demande Notions abordées #[Groups] sur une méthode#[Context]format: 'json'Problem JSON
- Exercice 3 : Réserver par pigeon Notions abordées POST JSONDTO#[MapRequestPayload]201 / 400 / 422
- Exercice 4 : Le sceau de la guilde Notions abordées access_tokenPare-feu sans étatAccessTokenHandlerInterface401
- Exercice 5 : Filtrer la carte Notions abordées #[MapQueryString]EnumQueryBuildervalidationFailedStatusCode
- Exercice final : 🐉 Boss : le pigeon égaré Notions abordées DébogagePare-feu#[Groups]Fuite de données
-
Fiche de cours du chapitre
06
Plus jamais ça !
🔒 Parcours complet
- Exercice 1 : Le premier garde-fou Notions abordées WebTestCasecreateClient()submitFormAssertions
- Exercice 2 : Des données pour tester Notions abordées Base de testJeu de donnéesCrawler
- Exercice 3 : L'addition, s'il vous plaît Notions abordées Test unitaireTestCase#[DataProvider]expectException
- Exercice 4 : Qui a le droit ? Notions abordées loginUser()Tests de sécurité401 / 403Rôles et voters
- Exercice 5 : Tester l'API Notions abordées jsonRequest()Tests d'APIJSONJeton d'accès
- Exercice final : 🐉 Boss : les tests menteurs Notions abordées Tests fiablesDonnées de testAssertions précises
-
Fiche de cours du chapitre
07
Le corbeau messager
🔒 Parcours complet
- Exercice 1 : Le premier corbeau Notions abordées MessengerMessage#[AsMessageHandler]MessageBusInterface
- Exercice 2 : Le corbeau part en arrière-plan Notions abordées TransportFile d'attentemessenger:consumein-memory
- Exercice 3 : Le corbeau qui se perd Notions abordées retry_strategyfailure_transportRéessaisRedeliveryStamp
- Exercice 4 : Le corbeau du soir Notions abordées Scheduler#[AsSchedule]RecurringMessageTâche planifiée
- Exercice 5 : Tester les corbeaux Notions abordées Tests de messagesFile en mémoireWorker
- Exercice final : 🐉 Boss : la volière en panne Notions abordées DébogageMessengerSchedulerFile des échecs
-
Fiche de cours du chapitre
08
Retour à la cave
🔒 Parcours complet
- Exercice 1 : La première migration Notions abordées Migrationsdoctrine:migrations:diffdoctrine:migrations:migrateup() et down()
- Exercice 2 : La cave reste pleine Notions abordées Migration de donnéesdoctrine:schema:validateValeur par défautdown()
- Exercice 3 : Le garde-manger Notions abordées ManyToManyCôté propriétaireCôté inverse#[ORM\OrderBy]Table de jointure
- Exercice 4 : Le coup de feu du vendredi Notions abordées Requêtes N+1Chargement paresseuxJointureaddSelectleftJoin
- Exercice 5 : Le grand livre d'or Notions abordées PaginationPaginatorsetFirstResultsetMaxResults#[MapQueryParameter]
- Exercice final : 🐉 Boss : le cellier effondré Notions abordées DébogageMigrationsManyToManyRequêtes N+1Pagination
-
Fiche de cours du chapitre
09
Les rouages de la taverne
🔒 Parcours complet
- Exercice 1 : Fermé le lundi Notions abordées Événements du noyaukernel.request#[AsEventListener]RequestEventClockInterface
- Exercice 2 : La cloche de la taverne Notions abordées Événement métierEventDispatcherInterfacedispatchPriorité des écouteurs
- Exercice 3 : Le slug qui s'écrit tout seul Notions abordées Écouteurs Doctrine#[AsEntityListener]prePersistSluggerInterface
- Exercice 4 : L'oracle des vents Notions abordées Décoration de service#[AsDecorator]#[AutowireDecorated]CacheCacheInterface
- Exercice 5 : Les réglages de la taverne Notions abordées Variables d'environnement#[Autowire(env:)]Processeurs int: et csv:.env.env.test
- Exercice final : 🐉 Boss : la taverne à l'envers Notions abordées DébogageÉvénementsÉcouteurs DoctrineDécoration de serviceCache
-
Fiche de cours du chapitre
10
La vie d'une réservation
🔒 Parcours complet
- Exercice 1 : Le premier parchemin Notions abordées MailerMailerInterfaceEmailMAILER_DSNassertEmailCount
- Exercice 2 : Un parchemin qui a de l'allure Notions abordées TemplatedEmailTemplate Twig d'e-mailurl() et path()Service d'envoi
- Exercice 3 : La vie d'une réservation Notions abordées WorkflowMachine à étatsPlaces et transitionsmarking_storeinitial_marking
- Exercice 4 : Le registre de Gorm Notions abordées Transitions depuis un contrôleurGardes#[AsGuardListener]TransitionBlockerworkflow_transitions()
- Exercice 5 : Les parchemins du registre Notions abordées Événements du workflow#[AsEnteredListener]entered et leaveMailer
- Exercice final : 🐉 Boss : les parchemins égarés Notions abordées DébogageWorkflowGardesÉvénements du workflowMailer
-
Fiche de cours du chapitre
11
Les ordres du patron
🔒 Parcours complet
- Exercice 1 : L'inventaire Notions abordées Commande console#[AsCommand]SymfonyStyle#[Option]Codes de sortieCommandTester
- Exercice 2 : La commande de Bruna Notions abordées #[Argument]#[Option]Options booléennesValidatorInterfaceCommand::INVALID
- Exercice 3 : Gorm pose les questions Notions abordées Mode interactif#[Ask]#[Interact]$io->choice()$io->confirm()--no-interaction
- Exercice 4 : Le grand ménage Notions abordées Tâche longueprogressIterate()--dry-runTraitement par lotstoIterable()Verbosité
- Exercice 5 : Tester les ordres Notions abordées CommandTester
- Exercice final : 🐉 Boss : les ordres mal compris Notions abordées DébogageCommande consoleCodes de sortieMode non interactifTraitement par lots
-
Fiche de cours du chapitre
12
Le grand service
🔒 Parcours complet
- Exercice 1 : Le cahier des charges Notions abordées ModélisationEntités et relationsValidationMigrations
- Exercice 2 : L'affiche des soirées Notions abordées Contrôleur et templatesFormulaireSécuritéRequêtes N+1
- Exercice 3 : Les inscriptions Notions abordées FormulaireRègle métierFormErrorTemplatedEmail
- Exercice 4 : Les guildes s'invitent Notions abordées API JSON#[MapRequestPayload]Codes HTTPPare-feu sans état
- Exercice 5 : La veille au soir Notions abordées Commande consoleMailerMigrationsIdempotence
- Exercice final : 🐉 Boss : le grand service Notions abordées Tests fonctionnelsCommandTester
-
Fiche de cours du chapitre