
Laravel et ses autres paquets suivent le système de versionnement sémantique. Les versions majeures du framework sont publiées chaque année dans les environs de février, tandis que les versions mineures et les correctifs peuvent être publiés aussi souvent que chaque semaine. Les versions mineures et les correctifs ne doivent jamais contenir de modifications de rupture.
Laravel est passé à des versions annuelles avec la sortie de Laravel 8. Auparavant, les versions majeures étaient publiées tous les 6 mois. Selon l’équipe de développement, cette transition a pour but d'alléger la charge de maintenance de la communauté et de mettre cette équipe de développement au défi de livrer de nouvelles fonctionnalités sans introduire de changements radicaux.
« Cet engagement à livrer de grandes nouvelles fonctionnalités au cours de la version actuelle conduira probablement à ce que les futures versions "majeures" soient principalement utilisées pour des tâches de maintenance telles que la mise à niveau des dépendances en amont, ce qui peut être vu dans ces notes de version », déclare l’équipe.
Lorsqu’on fait référence au framework Laravel ou à ses composants à partir de d’une application ou de d’un paquetage, il est recommandé de toujours utiliser une contrainte de version telle que ^9.0, car les versions majeures de Laravel contiennent des modifications de rupture. Voici, ci-dessous, les améliorations apportées par Laravel 9.0 :
Arguments nommés
Les arguments nommés ne sont pas couverts par les directives de rétrocompatibilité de Laravel. Pour l’équipe de développement, l'utilisation d'arguments nommés lors de l'appel de méthodes Laravel doit se faire avec prudence et en sachant que les noms des paramètres peuvent changer à l'avenir.
Politique de support
Pour les versions LTS, telles que Laravel 9, les corrections de bogues sont fournies pendant 2 ans et les corrections de sécurité sont fournies pendant 3 ans. Pour les versions générales, les corrections de bogues sont fournies pendant 18 mois et les corrections de sécurité sont fournies pendant 2 ans. Pour toutes les bibliothèques supplémentaires, y compris Lumen, seule la dernière version reçoit des corrections de bogues. Laravel 9.x requiert une version minimale de PHP de 8.0.
Amélioration des accesseurs / mutateurs éloquents
Laravel 9.x offre une nouvelle façon de définir les accesseurs et mutateurs Eloquent. Dans les versions précédentes de Laravel, la seule façon de définir les accesseurs et les mutateurs était de définir des méthodes préfixées sur le modèle comme suit :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | public function getNameAttribute($value) { return strtoupper($value); } public function setNameAttribute($value) { $this->attributes['name'] = $value; } |
Toutefois, dans Laravel 9.x, il est possible de définir un accesseur et un mutateur à l'aide d'une seule méthode non préfixée en indiquant un type de retour de Illuminate\Database\Eloquent\Casts\Attribute :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | use Illuminate\Database\Eloquent\Casts\Attribute; public function name(): Attribute { return new Attribute( get: fn ($value) => strtoupper($value), set: fn ($value) => $value, ); } |
En outre, cette nouvelle approche de la définition des accesseurs mettra en cache les valeurs des objets renvoyés par l'attribut, tout comme les classes de cast personnalisées :
Casting d'attributs éloquent d'Enum
Eloquent permet maintenant de convertir les valeurs d'attributs en enums PHP. Pour ce faire, il est possible de spécifier l'attribut et l'enum souhaitez convertir dans le tableau de propriétés $casts du modèle :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 | use App\Enums\ServerStatus; /** * The attributes that should be cast. * * @var array */ protected $casts = [ 'status' => ServerStatus::class, ]; |
Une fois que vous avez défini le cast sur votre modèle, l'attribut spécifié sera automatiquement converti en un enum lorsque vous interagirez avec cet attribut :
Code : | Sélectionner tout |
1 2 3 4 5 | if ($server->status == ServerStatus::provisioned) { $server->status = ServerStatus::ready; $server->save(); } |
Liaisons implicites de routes avec les Enums
PHP 8.1 introduit le support des Enums. Laravel 9.x introduit la possibilité de saisir un Enum dans la définition de d’une route et Laravel n'invoquera la route que si ce segment de route est une valeur Enum valide dans l'URI. Sinon, une réponse HTTP 404 sera renvoyée automatiquement. Par exemple, avec l'Enum suivante :
Code : | Sélectionner tout |
1 2 3 4 5 | enum Category: string { case Fruits = 'fruits'; case People = 'people'; } |
Code : | Sélectionner tout |
1 2 3 | Route::get('/categories/{category}', function (Category $category) { return $category->value; }); |
Dans les versions précédentes de Laravel, vous pouvez souhaiter étendre le second modèle Eloquent dans une définition de route de sorte qu'il soit un enfant du modèle Eloquent précédent. Par exemple, considérez cette définition de route qui récupère un article de blog par slug pour un utilisateur spécifique :
Code : | Sélectionner tout |
1 2 3 4 5 6 | use App\Models\Post; use App\Models\User; Route::get('/users/{user}/posts/{post:slug}', function (User $user, Post $post) { return $post; }); |
Lors de l'utilisation d'une liaison implicite à clé personnalisée comme paramètre de route imbriquée, Laravel étend automatiquement la requête pour récupérer le modèle imbriqué par son parent en utilisant des conventions pour deviner le nom de la relation sur le parent. Cependant, ce comportement n'était auparavant pris en charge par Laravel que lorsqu'une clé personnalisée était utilisée pour la liaison de la route enfant. Cependant, dans Laravel 9.x, il est maintenant possible de demander à Laravel de mettre en place des liaisons "enfant" même si une clé personnalisée n'est pas fournie. Pour ce faire, il est possible d’invoquer la méthode scopeBindings lors de la définition de d’une route :
Code : | Sélectionner tout |
1 2 3 4 5 6 | use App\Models\Post; use App\Models\User; Route::get('/users/{user}/posts/{post}', function (User $user, Post $post) { return $post; })->scopeBindings(); |
Il est également possible de demander à un groupe entier de définitions d'itinéraires d'utiliser des liaisons scopées :
Code : | Sélectionner tout |
1 2 3 4 5 | Route::scopeBindings()->group(function () { Route::get('/users/{user}/posts/{post}', function (User $user, Post $post) { return $post; }); }); |
Moteur de base de données Laravel Scout
Si l’application interagit avec des bases de données de petite ou moyenne taille ou a une charge de travail légère, avec Laravel 9.0, il est maintenant possible d’utiliser le moteur de base de données de Scout au lieu d'un service de recherche dédié comme Algolia ou MeiliSerach. Le moteur de base de données utilisera des clauses where like et des index plein texte lors du filtrage des résultats de la base de données existante pour déterminer les résultats de recherche applicables à la requête.
Rendu des modèles Blade en ligne
Face au besoin de transformer une chaîne brute de modèle Blade en HTML valide, il est possible d’accomplir cela en utilisant la méthode de rendu fournie par la façade Blade. La méthode de rendu accepte la chaîne du modèle Blade et un tableau optionnel de données à fournir au modèle :
Code : | Sélectionner tout |
use Illuminate\Support\Facades\Blade;
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.