Passer au contenu principal

Introduction

Laravel 13 est sorti le 17 mars 2026. Comme chaque année, il s’agit d’une version majeure. Laravel 13 se concentre particulièrement sur les workflows AI-natifs, des valeurs par défaut plus sûres et des API plus expressives pour les développeurs. Les changements cassants sont réduits au minimum et la plupart des applications peuvent être migrées avec peu de modifications. En parallèle, de nombreuses nouveautés — comme le Laravel AI SDK et la recherche sémantique — sont susceptibles de transformer profondément le développement d’applications modernes.
Politique de support de Laravel 13 : corrections de bugs jusqu’au T3 2027, correctifs de sécurité jusqu’au 17 mars 2028.

Mise à jour des prérequis PHP

Laravel 13 nécessite PHP 8.3 ou supérieur. La prise en charge de PHP 8.2 est terminée.
VersionPHPDate de sortieFin corrections de bugsFin correctifs de sécurité
118.2 - 8.412 mars 20243 septembre 202512 mars 2026
128.2 - 8.524 février 202513 août 202624 février 2027
138.3 - 8.517 mars 2026T3 202717 mars 2028
Les principaux avantages de PHP 8.3 : constantes typées, fonction json_validate(), attribut #[\Override], etc.

Principales nouveautés

Laravel AI SDK

La star de Laravel 13 est un SDK IA de première partie. Il fournit une API unifiée pour la génération de texte, les agents à appels d’outils, les embeddings, l’audio, la génération d’images et l’intégration de vector stores. Vous construisez des fonctionnalités IA sans dépendre d’un fournisseur particulier, tout en conservant une expérience de développement typique de Laravel. Génération de texte (agent)
use App\Ai\Agents\SalesCoach;

$response = SalesCoach::make()->prompt('Analyse cette transcription de vente...');

return (string) $response;
Génération d’image
use Laravel\Ai\Image;

$image = Image::of('un donut posé sur un plan de travail de cuisine')->generate();

$rawContent = (string) $image;
Synthèse vocale
use Laravel\Ai\Audio;

$audio = Audio::of('J\'adore coder avec Laravel.')->generate();

$rawContent = (string) $audio;
Génération d’embeddings
use Illuminate\Support\Str;

$embeddings = Str::of('Les vins de la Napa Valley sont excellents.')->toEmbeddings();
Pour plus de détails, consultez la documentation du Laravel AI SDK.

Recherche sémantique / vectorielle

Une prise en charge native des requêtes vectorielles, alignée sur le AI SDK, a été ajoutée. Vous pouvez exécuter directement des recherches sémantiques depuis le query builder en utilisant PostgreSQL et pgvector.
$documents = DB::table('documents')
    ->whereVectorSimilarTo('embedding', 'les meilleurs domaines de Napa Valley')
    ->limit(10)
    ->get();
De l’ajout de colonnes d’embeddings à l’exécution des requêtes, tout se fait au sein de l’écosystème Laravel.

Ressources JSON:API

Laravel intègre un support de première partie pour les ressources JSON:API. Il devient simple de renvoyer des réponses conformes à la spécification JSON:API.
  • Sérialisation des objets ressource
  • Inclusion des relations
  • Sparse fieldsets
  • Liens
  • En-têtes de réponse conformes JSON:API

Extension des attributs PHP

Laravel 13 étend la configuration déclarative par attributs PHP à l’ensemble du framework. Application aux 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)
    {
        // ...
    }
}
Application aux jobs
use Illuminate\Queue\Attributes\Tries;
use Illuminate\Queue\Attributes\Backoff;
use Illuminate\Queue\Attributes\Timeout;
use Illuminate\Queue\Attributes\FailOnTimeout;

#[Tries(3)]
#[Backoff(60)]
#[Timeout(120)]
#[FailOnTimeout]
class ProcessPodcast implements ShouldQueue
{
    // ...
}
Principaux attributs ajoutés :
AttributRôle
#[Middleware]Applique un middleware à un contrôleur ou une méthode
#[Authorize]Vérifie une policy sur un contrôleur
#[Tries]Nombre maximum de tentatives d’un job
#[Backoff]Délai de backoff d’un job
#[Timeout]Timeout d’un job
#[FailOnTimeout]Marque le job en échec en cas de timeout
D’autres attributs sont introduits sur Eloquent, les événements, les notifications, la validation, les tests, la sérialisation des ressources, etc.

Routage des files d’attente

Queue::route(...) permet de définir en un seul endroit les règles de routage par défaut (connexion, queue) pour un job donné.
use App\Jobs\ProcessPodcast;
use Illuminate\Support\Facades\Queue;

Queue::route(ProcessPodcast::class, connection: 'redis', queue: 'podcasts');
Fini le nom de queue codé en dur dans la classe du job : la configuration d’infrastructure est séparée du code.

Prolonger le TTL du cache

Cache::touch(...) permet de prolonger le TTL d’un élément de cache sans avoir à en récupérer et resauvegarder la valeur.
// Prolonger le TTL de 3600 secondes sans modifier la valeur
Cache::touch('expensive-computation', 3600);

Renforcements de sécurité

Renforcement de la protection CSRF (PreventRequestForgery)

Le middleware CSRF est renommé de VerifyCsrfToken en PreventRequestForgery, et une validation de l’origine des requêtes basée sur l’en-tête Sec-Fetch-Site est ajoutée.
use Illuminate\Foundation\Http\Middleware\PreventRequestForgery;

// Exclure le middleware dans les tests
->withoutMiddleware([PreventRequestForgery::class]);
VerifyCsrfToken reste en tant qu’alias déprécié, mais la migration vers le nouveau nom est recommandée.

Restriction de la désérialisation en cache

L’option serializable_classes a été ajoutée dans config/cache.php, avec false comme valeur par défaut. Elle empêche les attaques de désérialisation PHP en cas de fuite de la APP_KEY.
// config/cache.php
'serializable_classes' => [
    App\Data\CachedDashboardStats::class,
    App\Support\CachedPricingSnapshot::class,
],
Si vous stockez des objets PHP dans le cache, vous devez ajouter explicitement les classes dans la liste blanche.

Modifications des starter kits

Les starter kits refondus dans Laravel 12 (bases React, Vue, Livewire) restent disponibles dans Laravel 13. Inertia v3 est également publié en même temps que Laravel 13. Principaux changements :
  • Layout props simplifiées
  • Prise en charge de Vite 8
  • Ajout du callback withApp
  • Nouveaux composants Blade
Si vous utilisez Inertia v3, envisagez la mise à niveau en parallèle.

Autres améliorations

Mise à niveau assistée par IA (Laravel Boost)

Laravel Boost est un serveur MCP de première partie. En s’intégrant à des éditeurs pilotés par IA (Claude Code, Cursor, OpenCode, Gemini, VS Code, etc.), il permet de semi-automatiser la mise à niveau via la commande slash /upgrade-laravel-v13.
composer require laravel/boost:^2.0 --dev

Ajouts aux contrats

De nouvelles méthodes ont été ajoutées aux contrats suivants :
ContratMéthodes ajoutées
Bus\DispatcherdispatchAfterResponse
Routing\ResponseFactoryeventStream (support SSE)
Auth\MustVerifyEmailmarkEmailAsUnverified
Queue\QueuependingSize, delayedSize, reservedSize, creationTimeOfOldestPendingJob
Cache\Store / Cache\Repositorytouch

Conclusion

Laravel 13 se caractérise par « peu de changements cassants et beaucoup de nouveautés ». La mise à niveau est légère, tandis que l’AI SDK et la recherche sémantique peuvent transformer profondément le développement d’applications modernes. Lorsque vous êtes prêt à mettre à niveau une application existante de Laravel 12 vers 13, consultez le guide détaillé ci-dessous.

Guide de mise à niveau de Laravel 12 à 13

Liste des changements cassants et procédure pas à pas de mise à niveau.
Dernière modification le 13 juillet 2026