Quoi de neuf dans Laravel 9 ?

Avatar de Benjamin Crozat.

Publié le par Benjamin Crozat

Temps de lecture estimé : 2 minutes

Laravel 9, la dernière version en date du framework, est truffée de changements intéressants. Je vous présente une poignée d'entre eux.

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

Besoin d'aide ? Envie de partager ?
Inscrivez-vous ou connectez-vous d'abord.

Ça vous a plu ?
Abonnez-vous à la newsletter !

Recevez régulièrement news, trucs et astuces à propos de Laravel et son ecosystème.

Autres articles à lire