Quoi de neuf dans Laravel 9 ?
Publié le par Benjamin Crozat
Temps de lecture estimé : 2 minutes
Laravel est mis à jour toute l’année à travers des versions mineures et des patches. La différence avec Laravel0 qui est une version majeure, c’est que de potentiels “breaking changes” ont été introduits et sont susceptibles d’affecter votre code.
Soyez donc prudent, mais ne trainez pas trop car les mises à jour de sécurité de Laravel 8 s’arrêteront le 24 janvier
Si vous n’avez jamais mis à jour de projet Laravel, je vous invite à consulter le guide que j’ai écrit “Comment mettre à jour Laravel” avant toute chose.
Partons maintenant à la découverte des nouveautés et changements de Laravel
Changement : PHP0 minimum est requis
PHP est un langage qui évolue vite. Contrairement à WordPress qui a proposé pendant longtemps une compatibilité avec PHP2, Laravel augmente la version minimum de PHP à chaque version majeure. Si vous êtes coincés à la version4 ou moins, c’est le moment de faire du forcing au boulot pour migrer vers PHP1 !
Changement : le dossier resources/lang
à la racine
Le dossier resources/lang
a finalement déménagé à la racine afin que le dossier resources
soit consacré exclusivement au front-end. Pas d’inquiétudes cela dit ; si vous avez mis à jour vers Laravel 9 sans bouger le dossier, tout continuera à fonctionner normalement.
Changement : 1a présentation pour php artisan route:list
La précédente version de route:list
était un cauchemar à l’utilisation. Celle-ci est nettement plus lisible. Je vous laisse apprécier. 👍
Nouveauté : générer un test coverage avec php artisan test
Le test coverage est loin d’être une métrique infaillible pour déterminer la solidité d’un projet. Néanmoins, si cela encourage les gens à écrire des tests, on ne se plaindra pas.
Installez d’abord Xdebug :
pecl install xdebug
Ajoutez cette ligne dans votre php.ini
:
xdebug.coverage=on
Enfin, exécutez cette commande Artisan dans votre projet :
php artisan test --coverage
Nouveauté : les migrations anonymes par défaut
Terminé les conflits au niveau du nommage des classes des migrations. Dorénavant, grâce aux classes anonymes (introduites dans PHP 7), vous pouvez les déclarer comme ceci :
<?php use Illuminate\Support\Facades\Schema;use Illuminate\Database\Schema\Blueprint;use Illuminate\Database\Migrations\Migration; return new class extends Migration { public function up() : void { Schema::create('posts', function (Blueprint $table) { $table->id(); $table->string('title'); $table->longText('content'); $table->timestamps(); }); } public function down() : void { Schema::dropIfExists('posts'); }};
Bien sûr, Artisan génèrera lui aussi les migrations avec les classes anonymes.
Nouveauté : une nouvelle manière de déclarer ses mutators et ses accessors
Avant :
public function getImgAttribute(){ return \Storage::url($this->img);} public function setImgAttribute($value){ $this->attributes['img'] = trim($value, '/');}
Après :
use Illuminate\Database\Eloquent\Casts\Attribute; public function img(){ return new Attribute( fn ($value) => \Storage::url($value), fn ($value) => trim($value, '/') );}
Ou mieux encore, pour plus de clareté, nous pouvons utiliser les arguments nommés de PHP 8 :
return new Attribute( get: fn ($value) => \Storage::url($value), set: fn ($value) => trim($value, '/'));
Nouveauté : les groupes de routes sous l’égide d’un seul contrôleur
Avez-vous des routes utilisant toutes le même contrôleur ? Il est maintenant possible de les regrouper afin d’éviter de se répéter.
Route::controller(PostController::class)->group(function () { Route::get('/blog', 'index')->name('posts.index'); Route::get('/blog/{post:slug}', 'show')->name('posts.show');});
Nouveauté : rendu d’une template Blade via une chaine de caractères
Il est désormais possible de faire un rendu d’une template Blade directement depuis une chaine de caractère :
Blade::render( '<p>Bonjour, {{ $name }} !</p>', ['name' => 'Homer'], deleteCachedView: true);
Nouveauté : une syntaxe plus courte pour les slots des composants Blade
<x-section>- <x-slot name="title"> + <x-slot:title> Bonjour, visiteur de Larabiz ! </x-slot> ... </x-section>
De quoi faire un bon nettoyage de printemps dans vos vues. 👍
De nouvelles directives Blade
@checked
<input type="checkbox" name="foo" value="1"- @if ($value === 1) checked @endif + @checked($value === 1) />
@selected
<select name="country"> @foreach ($countries as $country) <option value="{{ $country }}- @if ($country === $user->country) selected @endif + @selected($country === $user->country) > {{ $country }} </option> @endforeach </select>
De nouveaux helpers
str()
-use Illuminate\Support\Str; // On transforme "ha" en "Hahahahaha!"-echo Str::of('foo') +echo str('ha') ->repeat(5) ->headline() ->append('!');
to_route()
(également dispo dans Laravel 8)
-return redirect()->to('foo'); +return to_route('foo');
Quel intérêt ? La lisibilité pardi !
Bonus : un nouveau laravel.com
Il ne s’agit pas d’une nouveauté ayant un vrai rapport avec Laravel 9, mais il est agréable de constater que le site officiel reçoit toute l’attention qu’il mérite. Le design a été actualisé et des améliorations ont été faites sur la coloration syntactique des bouts de code.
D’ailleurs, saviez-vous que laravel.com est open source ? Vous pouvez retrouver le dépôt sur GitHub.
Ce n’est pas fini
Il y a encore de nombreuses fonctionnalités dont nous n’avons pas parlé, dont certaines sont ajoutées dans les versions mineures. Vous pourriez allez faire un tour dans le changelog et les Pull Requests mergées sur le dépôt GitHub du framework afin de ne rien manquer.
0 commentaire
Inscrivez-vous ou connectez-vous d'abord.