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.

Nom : laravel.png
Affichages : 203483
Taille : 2,9 Ko

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 - Visualiser dans une fen�tre � part
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 - Visualiser dans une fen�tre � part
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 - Visualiser dans une fen�tre � part
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 :

Code : S�lectionner tout - Visualiser dans une fen�tre � part
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 - Visualiser dans une fen�tre � part
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 :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
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 - Visualiser dans une fen�tre � part
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 - Visualiser dans une fen�tre � part
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 - Visualiser dans une fen�tre � part
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 - Visualiser dans une fen�tre � part
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;

Code : S�lectionner tout - Visualiser dans une fen�tre � part
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 :

Code : S�lectionner tout - Visualiser dans une fen�tre � part
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