Les nouveautés à venir sur Laravel 9
Arthur Monney
@mckenziearts
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.
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.
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.
use Illuminate\Database\Migrations\Migration;use Illuminate\Database\Schema\Blueprint;use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('people', function (Blueprint $table) { $table->string('first_name')->nullable(); }); }};
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 :
public function getNameAttribute($value){ return strtoupper($value);} public function setNameAttribute($value){ $this->attributes['name'] = $value;}
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
:
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 :
use App\Support\Address;use Illuminate\Database\Eloquent\Casts\Attribute; public function address(): Attribute{ return new Attribute( get: fn ($value, $attributes) => new Address( $attributes['address_line_one'], $attributes['address_line_two'], ), set: fn (Address $value) => [ 'address_line_one' => $value->lineOne, 'address_line_two' => $value->lineTwo, ], );}
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 :
use App\Http\Controllers\OrderController; Route::controller(OrderController::class)->group(function () { Route::get('/orders/{id}', 'show'); Route::post('/orders', 'store');});
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.
Arthur Monney
@mckenziearts
Fullstack Designer - Laravel & React Developer. Laravel Cameroon Organizer @laravelcm | @shopperlabs