Laravel 9.4 est disponible !

Publié le 14 mars 2022 par Mathieu De Gracia
Couverture de l'article Laravel 9.4 est disponible !

Laravel 9.4 est désormais release depuis le 9 mars, toutes les modifications sont disponibles ici mais voyons-les plus importantes de cette nouvelle version mineure.

VerifyCsrfToken configurable

Principale amélioration de cette 9.4, le token CSRF est désormais entièrement configurable grace à cette PR de Jaggy !

Pour en profiter, rien de plus simple, il vous suffit d'ajouter cette nouvelle méthode au middleware app\Http\Middleware\VerifyCsrfToken :

1use Symfony\Component\HttpFoundation\Cookie;
2 
3class VerifyCsrfToken extends Middleware {
4 protected function newCookie($request, $config)
5 {
6 return new Cookie(
7 "XSRF-TOKEN-{$request->user()->type}",
8 $request->session()->token(),
9 $this->availableAt(60 * $config['lifetime']),
10 $config['path'],
11 $config['domain'],
12 $config['secure'],
13 false,
14 false,
15 $config['same_site'] ?? null,
16 );
17 }
18}

Vous pourrez ainsi avoir un contrôle total sur les particularités du cookie CSRF, en modifiant par exemple sa durée de vie, sa visibilité ...

Cela peut s'avérer utile dans les applications complexes gérants plusieurs domaines et vous prévenir de l'erreur "419 Page Expired".

Nouvelle méthode soleValue

Laravel 8.23 ajoutait une nouvelle méthode sole permettant de s'assurer qu'un seul item était trouvable par une requête du Query Builder.

1DB::table('products')->where('ref', '#123')->sole();

Une MultipleRecordsFoundException ou une NoRecordsFoundException sera lancée si respectivement plusieurs ou aucun item correspond à la requête.

Matthew Hailwood enrichit cette fonctionnalité d'une nouvelle méthode soleValue permettant de récupérer directement une valeur du résultat d'un sole.

1DB::table('products')->where('ref', '#123')->soleValue('id');

L'affichage des Mutex

Dorénavant la commande artisan schedule:list affichera clairement les commandes actuellement "mutex" depuis cette PR de Madman-81.

1$ php artisan schedule:list
2+----------------------------------------------------------+-------------+--------------------+----------------------------+----------------------------+
3| Command | Interval | Description | Next Due | Has Mutex |
4+----------------------------------------------------------+-------------+--------------------+----------------------------+----------------------------+
5| '/usr/bin/php8.0' 'artisan' mycommands:something | */2 * * * * | Process something | 2022-03-03 10:22:00 +00:00 | Yes |
6| '/usr/bin/php8.0' 'artisan' mycommands:otherthing | */2 * * * * | Process otherthing | 2022-03-03 10:22:00 +00:00 | |
7+----------------------------------------------------------+-------------+--------------------+----------------------------+----------------------------+

Le mutex est un mode d'exécution de vos commandes qui vous assure qu'une même commande ne peut être exécutée deux fois simultanément.

Cela s'avère utile quand l'exécution d'une commande prend du temps à se finaliser afin d'éviter de surcharger votre serveur.

Ce comportement n'est pas celui par défaut de Laravel, il est nécessaire de configurer votre commande avec la méthode withoutOverlapping dans votre kernel.

1$schedule->command('mail:send')->withoutOverlapping();
Mathieu De Gracia avatar
Mathieu De Gracia
Des fois, mon chat code à ma place 🐱

A lire

Autres articles de la même catégorie