Laravel9 min de lecture
Nouveautés Laravel 13
Laravel 13 est sorti le 17 mars 2026. Peu de changements cassants, beaucoup de confort : attributs PHP, SDK IA officiel, ressources JSON:API. Voici ce qui change ta façon d'écrire du code.
Quelle version, jusqu'à quand
Une version majeure par an. Chaque version reçoit 18 mois de corrections de bugs et 2 ans de correctifs de sécurité. Laravel 13 demande PHP 8.3 au minimum (on vise 8.4).
Les attributs PHP partout
Plus de quinze endroits du framework acceptent désormais des attributs PHP à la place des propriétés de classe. C'est optionnel et non cassant : la configuration se lit en haut de la classe. Bascule pour comparer.
Modèles Eloquent
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Attributes\Fillable;
use Illuminate\Database\Eloquent\Attributes\Hidden;
use Illuminate\Database\Eloquent\Attributes\Table;
use Illuminate\Database\Eloquent\Model;
#[Table('billing_invoices')]
#[Fillable(['customer_id', 'status', 'total'])]
#[Hidden(['internal_notes'])]
class Invoice extends Model
{
}Jobs en file
<?php
use Illuminate\Queue\Attributes\Backoff;
use Illuminate\Queue\Attributes\FailOnTimeout;
use Illuminate\Queue\Attributes\Timeout;
use Illuminate\Queue\Attributes\Tries;
#[Tries(3)]
#[Backoff([60, 300])]
#[Timeout(120)]
#[FailOnTimeout]
class SendInvoiceReminder implements ShouldQueue
{
use Queueable;
}Middleware et autorisation dans les contrôleurs
<?php
namespace App\Http\Controllers;
use App\Models\Comment;
use App\Models\Post;
use Illuminate\Routing\Attributes\Controllers\Authorize;
use Illuminate\Routing\Attributes\Controllers\Middleware;
#[Middleware('auth')]
class CommentController
{
#[Middleware('subscribed')]
#[Authorize('create', [Comment::class, 'post'])]
public function store(Post $post)
{
// ...
}
}Laravel AI SDK
Le SDK IA officiel est stable : une seule API pour le texte, les agents avec outils, les images, l'audio et les embeddings. Changer de fournisseur (OpenAI, Anthropic, Gemini) est une question de configuration, pas de réécriture.
<?php
use App\Ai\Agents\SalesCoach;
use Illuminate\Support\Str;
use Laravel\Ai\Image;
// Agent: provider (OpenAI, Anthropic, Gemini...) is configuration, not code
$response = SalesCoach::make()->prompt('Analyze this sales transcript...');
// Images and embeddings with the same fluent API
$image = Image::of('A donut sitting on the kitchen counter')->generate();
$embeddings = Str::of('Napa Valley has great wine.')->toEmbeddings();La recherche sémantique arrive dans le query builder avec whereVectorSimilarTo(), sur PostgreSQL avec l'extension pgvector.
<?php
// PostgreSQL + pgvector: search by meaning, not by keyword
$documents = DB::table('documents')
->whereVectorSimilarTo('embedding', 'Best wineries in Napa Valley')
->limit(10)
->get();Ressources JSON:API
Laravel génère maintenant des réponses conformes à la spécification JSON:API : relations incluses, champs partiels, liens et en-têtes. Utile quand un client externe impose ce format ; pour nos fronts Next.js, les JsonResource classiques restent la norme.
php artisan make:resource InvoiceResource --json-api<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\JsonApi\JsonApiResource;
class InvoiceResource extends JsonApiResource
{
public $attributes = ['status', 'total', 'due_at'];
public $relationships = ['customer', 'lines'];
}Les petites nouveautés utiles
Queue::route()centralise quelle file et quelle connexion utilise chaque job.Cache::touch()prolonge la durée de vie d'une clé sans relire ni réécrire sa valeur.- Le middleware
PreventRequestForgeryvérifie l'origine de la requête (en-têteSec-Fetch-Site) en plus du jeton CSRF. - Les passkeys sont intégrées à Fortify et aux starter kits : connexion sans mot de passe prête à l'emploi.
<?php
// AppServiceProvider::boot(): one place to route jobs to queues
Queue::route(ProcessPodcast::class, connection: 'redis', queue: 'podcasts');
// Extend a cache TTL without reading and rewriting the value
Cache::touch('dashboard:stats');L'écosystème à connaître
| Outil | Pourquoi |
|---|---|
| Pest 4 | Tests navigateur avec Playwright, régression visuelle, sharding de la suite en CI. |
| Laravel Boost | Serveur MCP et consignes qui donnent aux assistants IA le contexte exact de ton application (versions, schéma, routes). |
| Starter kits | Base React, Vue ou Livewire avec authentification, passkeys et Pest déjà configurés. |
| Nightwatch | Monitoring officiel : requêtes lentes, exceptions, jobs échoués en production. |
| Laravel Cloud | Hébergement géré par l'équipe Laravel, déploiement à chaque push. |
Mettre à jour depuis Laravel 12
La plupart des applications migrent en moins d'une heure. On le fait toujours sur une branche dédiée, chore/upgrade-laravel-13.
composer require laravel/framework:^13.0 laravel/tinker:^3.0 --with-all-dependencies
composer require pestphp/pest:^4.0 phpunit/phpunit:^12.0 --dev --with-all-dependencies
php artisan test --parallel # then read the upgrade guide line by lineSource : notes de version officielles Laravel 13, vérifiées en septembre 2026.