Pratique
Se servir d'une fonctionnalité, tout de suite
De courts exercices, à part des parcours : un code écrit à l'ancienne, à réécrire avec la fonctionnalité. Souvent une nouveauté du framework, parfois un point précis qui mérite qu'on s'y arrête.
Par version : Symfony 8.2 11 Laravel 13 8
- 20 exercices
- 20 nouveautés
Par titre
20- Laravel 13.34 Nouveauté Compter les lignes de plusieurs tables en une assertion assertDatabaseCount() accepte un tableau : le nombre de lignes attendu dans chaque table, vérifié en une seule assertion. TestsBase de données Faire l'exercice
- Symfony 8.2 Nouveauté Décrire un formulaire par attributs Les champs d'un formulaire se déclarent sur le DTO, juste à côté des contraintes de validation : plus de classe de formulaire pour les cas simples. FormulaireDTO Faire l'exercice
- Symfony 8.2 Nouveauté Des abonnés lisibles : method et priority ['tracer', 100] devient ['method' => 'tracer', 'priority' => 100] : getSubscribedEvents() dit enfin ce que contient chaque case. EventDispatcher Faire l'exercice
- Symfony 8.2 Nouveauté Des écouteurs qui se placent les uns par rapport aux autres #[AsEventListener(after: …, before: …)] : l'ordre des écouteurs se dit par leurs noms, plus par des priorités devinées. EventDispatcher Faire l'exercice
- Symfony 8.2 Nouveauté Des rôles par famille, avec des jokers ROLE_BLOG_* : une clé de role_hierarchy couvre toute une famille de rôles, y compris ceux qui ne sont déclarés nulle part. SecurityRôles Faire l'exercice
- Symfony 8.2 Nouveauté Des sous-commandes à la Docker tenant --name=acme users list : le groupe porte l'option une seule fois, chaque sous-commande la lit dans la chaîne des commandes. Console Faire l'exercice
- Symfony 8.2 Nouveauté Laisser remonter une ValidationFailedException Une ValidationFailedException non attrapée donne désormais une 422 avec la liste des violations : plus besoin de l'envelopper. ValidatorAPI Faire l'exercice
- Symfony 8.2 Nouveauté Lire toute une collection avec [*] Un chemin comme [*][membres][*][email] remplace les boucles imbriquées : PropertyAccess lit chaque élément d'une collection. PropertyAccess Faire l'exercice
- Symfony 8.1 Nouveauté Lire un en-tête avec #[MapRequestHeader] Un en-tête HTTP arrive directement en argument du contrôleur, et son absence donne une 400 sans une ligne de code. ContrôleurHttpKernel Faire l'exercice
- Laravel 13.26 Nouveauté Migrer des fichiers au fil des lectures avec read-through Un disque read-through lit le nouveau stockage, se replie sur l'ancien et recopie ce qu'il y trouve : la migration se fait toute seule. Stockage Faire l'exercice
- Laravel 13.26 Nouveauté Ne traiter que le dernier événement d'une rafale avec #[DebounceFor] Un écouteur mis en file avec #[DebounceFor] attend la fin de la rafale et ne traite que le dernier événement, là où ShouldBeUnique gardait le premier. Files d'attenteÉvénements Faire l'exercice
- Laravel 13.32 Nouveauté Passer un fichier d'un disque à l'autre avec moveToDisk() copyToDisk() et moveToDisk() font passer un fichier d'un disque à un autre en flux, sans le charger en mémoire. Stockage Faire l'exercice
- Laravel 13.30 Nouveauté Regrouper les éléments voisins avec chunkBy() Les messages consécutifs d'un même auteur se regroupent en une ligne, sans boucle ni variable de suivi. Collections Faire l'exercice
- Laravel 13.33 Nouveauté Relire les colonnes calculées par la base avec #[Refreshes] Un modèle marqué #[Refreshes] relit, après chaque écriture, les colonnes que la base remplit elle-même : valeur par défaut, colonne générée. Eloquent Faire l'exercice
- Laravel 13.24 Nouveauté Restreindre les clés d'un tableau avec array_keys Une règle de validation pour « ce tableau ne contient que ces clés » : plus de closure qui compare array_keys() à une liste. Validation Faire l'exercice
- Symfony 8.2 Nouveauté Un Cache-Control pour le CDN, un autre pour le navigateur $response->cacheControl('CDN') écrit un CDN-Cache-Control : le CDN, qu'on sait purger, garde la page longtemps ; le navigateur, non. HttpFoundationCache HTTP Faire l'exercice
- Symfony 8.2 Nouveauté Un champ pour une période, avec BoundsType Deux dates et la règle qui les ordonne tiennent dans un seul champ : plus d'écouteur POST_SUBMIT pour comparer les bornes à la main. Formulaire Faire l'exercice
- Symfony 8.2 Nouveauté Un lien de réinitialisation qui ne sert qu'une fois UriSigner::sign() accepte une « version » : signez le lien avec l'empreinte du mot de passe, et il meurt dès que le mot de passe change. HttpFoundationSécurité Faire l'exercice
- Symfony 8.2 Nouveauté Un nom par version d'API, et des groupes à écarter #[SerializedName('nom', groups: 'v1')] : une propriété change de nom selon le groupe ; ignored_groups écarte un groupe sans toucher à la classe. SerializerAPI Faire l'exercice
- Laravel 13.31 Nouveauté Vérifier qu'un mail ne part qu'une fois assertSentOnce() et assertSentOnDemandOnce() : les faux Mail et Notification disent enfin « exactement une fois » en un mot. TestsMailNotifications Faire l'exercice
Ces exercices s'écrivent sans compte : l'éditeur s'ouvre tout de suite. Le compte garde votre progression, ouvre le mentor et les retours — créez le vôtre ou connectez-vous.