Laravel 9 est disponible, elle apporte une sortie route:list am�lior�e, un pilote de base de donn�es Laravel Scout,
une nouvelle syntaxe d'accesseur / mutateur Eloquent
L��quipe de d�veloppement de Laravel vient de publier la version 9 du framework PHP quelques mois apr�s la sortie de Laravel 8. Laravel 9 poursuit les am�liorations apport�es dans Laravel 8.x en introduisant le support des composants Symfony 6.0, Symfony Mailer, Flysystem 3.0, une sortie route:list am�lior�e, un pilote de base de donn�es Laravel Scout, une nouvelle syntaxe d'accesseur / mutateur Eloquent, des liaisons de route implicites via Enums, et une vari�t� d'autres corrections de bogues et d'am�liorations de la convivialit�.
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 :
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 :
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 :
1 2 3 4 5 6 7 8 9 10
| 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 :
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 :
1 2 3 4 5
| enum Category: string
{
case Fruits = 'fruits';
case People = 'people';
} |
Il est possible de d�finir une route qui ne sera invoqu�e que si le segment de route {category} est fruits ou People. Sinon, une r�ponse HTTP 404 sera renvoy�e :
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 :
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 :
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 :
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 :
1 2 3
| use Illuminate\Support\Facades\Blade;
return Blade::render('Hello, {{ $name }}', ['name' => 'Julian Bashir']); |
De m�me, la m�thode renderComponent peut �tre utilis�e pour rendre un composant de classe donn� en passant l'instance du composant � la m�thode :
use App\View\Components\HelloComponent;
return Blade::renderComponent(new HelloComponent('Julian Bashir'));
Am�lioration de la validation des donn�es des tableaux imbriqu�s
Pour acc�der � la valeur d'un �l�ment de tableau imbriqu� donn� lorsque des r�gles de validation sont assign�es � l'attribut, il est d�sormais possible de le faire en utilisant la m�thode Rule::forEach. La m�thode forEach accepte une fermeture qui sera invoqu�e pour chaque it�ration de l'attribut du tableau en cours de validation et qui recevra la valeur de l'attribut et son nom explicite, enti�rement d�velopp�. La fermeture doit renvoyer un tableau de r�gles � affecter � l'�l�ment du tableau :
1 2 3 4 5 6 7 8 9 10 11 12
| use App\Rules\HasPermission;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
$validator = Validator::make($request->all(), [
'companies.*.id' => Rule::forEach(function ($value, $attribute) {
return [
Rule::exists(Company::class, 'id'),
new HasPermission('manage-company', $value),
];
}),
]); |
Laravel 9.x ajoute des d�finitions de types am�lior�es, de style "g�n�rique", au composant collections, am�liorant ainsi le support des IDE et de l'analyse statique. Les IDE tels que PHPStorm ou les outils d'analyse statique tels que PHPStan comprendront d�sormais mieux les collections Laravel de mani�re native.
Source : Laravel
Et vous ?
Utilisez-vous le langage PHP ? Que pensez-vous du framework Laravel ?
Quelle am�lioration vous int�resse le plus dans la version 9 de Laravel ?
Quelles sont vos attentes ?
Quel Framework PHP utilisez-vous ? Pourquoi ?
Voir aussi :
Laravel 7 est disponible, une version majeure avec des am�liorations de la vitesse de routage, des balises de composants Blade et autres
PHP conserve la premi�re place en tant que langage de programmation c�t� serveur sur le Web avec pr�s de 79% d'utilisation, selon un rapport de la W3Techs
PHP 8.1 est disponible. Cette version permet d'obtenir une r�f�rence � n'importe quelle fonction et apporte le type de retour never
La version 3.2 du framework Django est disponible, avec la d�couverte automatique d'AppConfig, elle apporte de nouveaux d�corateurs pour le module d'administration
Partager