Laravel Open Source
5 min de lecture

Les nouveautés à venir sur Laravel 9

mckenziearts

Arthur Monney

@mckenziearts

Les nouveautés à venir sur Laravel 9

Laravel v9 sera la prochaine version LTS de Laravel, et elle sortira au début de l'année 2022. Dans cet article, nous allons présenter quelques nouvelles fonctionnalités et les changements annoncés pour cette nouvelle version.

Changements de la date de sortie de Laravel 9

La sortie de Laravel v9 était prévue pour septembre 2021, mais l'équipe Laravel a décidé de repousser cette version à janvier 2022 la raison etant la suivante :

Laravel utilise une variété de paquets gérés par la communauté ainsi que neuf composants Symfony pour un certain nombre de fonctionnalités du framework. La sortie de Symfony 6.0 est prévue en novembre. Pour cette raison, nous avons choisi de retarder la sortie de Laravel 9.0 jusqu'en janvier 2022. En retardant la sortie, nous pouvons mettre à niveau nos composants Symfony sous-jacents vers Symfony 6.0 sans être obligés d'attendre septembre 2022 pour effectuer cette mise à niveau. En outre, cela nous permet de mieux nous positionner pour les futures versions, car nos versions annuelles auront toujours lieu deux mois après celles de Symfony.

Cela repoussera également les futures versions majeures, et voici le calendrier pour l'avenir :

  • Laravel 9 : janvier 2022
  • Laravel 10 : janvier 2023
  • Laravel 11 : janvier 2024

PHP 8 - version minimale dans Laravel 9

Puisque Laravel 9 nécessitera Symfony 6.0 et qu'il a une exigence minimale de PHP 8, cela signifie que Laravel 9 aura la même restriction.

Nouveau design pour la commande routes:list

La commande routes:list est incluse dans Laravel depuis longtemps maintenant, et un problème qui se pose parfois est que si vous avez défini des routes énormes et complexes, il peut être difficile de les afficher dans la console. Grâce à une pull request de Nuno Maduro, cette commande obtient une nouvelle interface plus soft.

FIXWUq-XsAkGzbc.jpeg

Nouvelle option pour Test Coverage

Une nouvelle option artisan test --coverage permet d'afficher la couverture des tests directement sur le terminal. Il comprend également une option --min que vous pouvez utiliser pour indiquer l'application du seuil minimum pour la couverture du test.

FJZytaJXsAgqeeS.jpeg

Migrations anonymes

Au début de l'année 2021, la version 8.37 de Laravel a été dotée d'une nouvelle fonctionnalité appelée Migrations anonymes, qui permet d'éviter les collisions entre les noms de classes de migration.

1use Illuminate\Database\Migrations\Migration;
2use Illuminate\Database\Schema\Blueprint;
3use Illuminate\Support\Facades\Schema;
4 
5return new class extends Migration {
6 /**
7 * Run the migrations.
8 *
9 * @return void
10 */
11 public function up()
12 {
13 Schema::table('people', function (Blueprint $table) {
14 $table->string('first_name')->nullable();
15 });
16 }
17};

Au lancement de Laravel 9, ce sera la valeur par défaut lorsque vous exécuterez php artisan make:migration.

De SwiftMailer à Symfony Mailer

Le support de Symfony Mailer a été apporté par Dries Vints, James Brooks et Julius Kiekbusch.

Les versions précédentes de Laravel utilisaient la bibliothèque Swift Mailer pour envoyer des e-mails sortants. Cependant, cette bibliothèque n'est plus maintenue et a été remplacée par Symfony Mailer.

Veuillez consulter le guide de mise à niveau pour en savoir plus sur la manière de garantir la compatibilité de votre application avec Symfony Mailer.

Amélioration des accesseurs/mutateurs pour Eloquent

L'amélioration des accesseurs / mutateurs pour Eloquent a été ajouté par Taylor Otwell.

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 votre modèle comme ceci :

1public function getNameAttribute($value)
2{
3 return strtoupper($value);
4}
5 
6public function setNameAttribute($value)
7{
8 $this->attributes['name'] = $value;
9}

Toutefois, dans Laravel 9.x, vous pouvez 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 :

1use Illuminate\Database\Eloquent\Casts\Attribute;
2 
3public function name(): Attribute
4{
5 return new Attribute(
6 get: fn ($value) => strtoupper($value),
7 set: fn ($value) => $value,
8 );
9}

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 :

1use App\Support\Address;
2use Illuminate\Database\Eloquent\Casts\Attribute;
3 
4public function address(): Attribute
5{
6 return new Attribute(
7 get: fn ($value, $attributes) => new Address(
8 $attributes['address_line_one'],
9 $attributes['address_line_two'],
10 ),
11 set: fn (Address $value) => [
12 'address_line_one' => $value->lineOne,
13 'address_line_two' => $value->lineTwo,
14 ],
15 );
16}

Groupes de routes du contrôleur

Vous pouvez maintenant utiliser la méthode controller pour définir le contrôleur commun à toutes les routes du groupe. Ensuite, lorsque vous définissez les itinéraires, il vous suffit de fournir la méthode du contrôleur qu'ils invoquent :

1use App\Http\Controllers\OrderController;
2 
3Route::controller(OrderController::class)->group(function () {
4 Route::get('/orders/{id}', 'show');
5 Route::post('/orders', 'store');
6});

Mais cette fonctionnalité est disponible depuis Laravel 8.80

Laravel Breeze API & Next.js

Le kit de démarrage Laravel Breeze a reçu un mode d'échafaudage "API" et une implémentation frontend pour Next.js. Ce kit de démarrage peut être utilisé pour faire démarrer vos applications Laravel qui servent de backend, d'API authentifiée Laravel Sanctum pour un frontend JavaScript.

Et plus...

Laravel 9 sera bientot disponible, et d'autres nouvelles fonctionnalités et annonces vont arriver. Une liste plus complète des fonctionnalités est disponible sur le site de Laravel News.

Une fois que Laravel 9 sera officiellement disponible nous allons de nouveau faire un article pour lister les nouveautés les plus maarquantes.

mckenziearts

Arthur Monney

@mckenziearts

Fullstack Designer - Laravel & React Developer. Laravel Cameroon Organizer @laravelcm | @shopperlabs

Vous aimez cet article ? Faite le savoir en partageant