Laravel 13 : ce qui change par rapport à Laravel 12
Laravel 13 arrive avec un SDK IA officiel, des attributs PHP natifs et le support JSON:API. Voici ce qui compte vraiment si vous migrez depuis Laravel 12.
Laravel 13 est sorti le 17 mars 2026 et relève la version minimale de PHP à 8.3. Au-delà du changement de version, la release mise sur deux axes : rendre la configuration transverse explicite avec des attributs PHP, et donner à chaque application Laravel un moyen officiel de dialoguer avec des LLM et de servir la spec JSON:API. Voici ce qui change par rapport à Laravel 12, et si la migration en vaut la peine.
Laravel 12 vs Laravel 13 en un coup d'oeil
| Domaine | Laravel 12 | Laravel 13 |
|---|---|---|
| PHP minimum | 8.2 | 8.3 |
| Intégration LLM | Packages communautaires (Prism, openai-php) | SDK IA officiel |
| Config des jobs et commands | Propriétés de classe | Attributs PHP, optionnels, à 15+ endroits |
| JSON:API | À la main ou via un package | JsonApiResource officiel |
| Middleware CSRF | VerifyCsrfToken | PreventRequestForgery, basé sur l'origine |
| Routage des queues | onQueue() et onConnection() éparpillés | Queue::route() centralisé |
| Sortie | Février 2025 | Mars 2026 |
Lisez ce tableau comme un résumé. Chaque ligne est développée ci-dessous, avec ce qu'elle remplace et quand elle compte.
Un SDK IA officiel
La grande nouveauté est le Laravel AI SDK : une API unifiée pour la génération de texte, les agents avec tool-calling, les embeddings, l'audio et les images, quel que soit le fournisseur. Plutôt que de câbler vous-même les packages OpenAI ou Anthropic et de construire votre propre abstraction, vous avez une seule interface Laravel-native, avec un préfixe de provider, qui reste la même quel que soit le fournisseur que vous branchez. Elle inclut le streaming, la sortie structurée, et un fake de test pour ne pas taper une vraie API dans votre suite de tests.
use Laravel\Ai\Facades\Ai;
$response = Ai::text()
->using('anthropic:claude-sonnet-5')
->prompt('Résume ce changelog en une phrase.')
->generate();
echo $response->text;Il remplace des packages communautaires comme Prism et openai-php/laravel, et les wrappers Guzzle maison que beaucoup d'équipes avaient construits. Si vous n'appelez jamais qu'un seul provider, un wrapper léger reste suffisant ; le SDK prend son intérêt quand vous voulez de la portabilité entre providers ou les primitives d'agent et de tool-calling.
Des attributs PHP plutôt que des propriétés de classe
Laravel 13 introduit la syntaxe des attributs comme alternative optionnelle à la configuration par propriétés, à plus de 15 endroits : models, controllers, jobs, commands, listeners, mailables, notifications. Le but n'est pas de remplacer les conventions, c'est de mettre la configuration transverse, le nom de queue, le nombre de tentatives, les scopes de modèle, les observers, sur la déclaration de la classe plutôt qu'en propriétés publiques éparpillées dans le corps.
// Laravel 12 : configuration éparpillée dans des propriétés
class SendInvoice implements ShouldQueue
{
public $queue = 'invoices';
public $tries = 3;
public $backoff = 30;
}
// Laravel 13 : configuration déclarée là où la classe est déclarée
#[Queueable(queue: 'invoices', tries: 3, backoff: 30)]
class SendInvoice implements ShouldQueue
{
}C'est en opt-in, et les deux styles coexistent. L'avantage est la découvrabilité et une meilleure analyse statique ; le coût, pendant la transition, est une seconde façon de configurer la même chose, donc choisissez une convention par projet et appliquez-la partout.
Des ressources JSON:API nativement
La spec JSON:API, resource objects, relationships, sparse fieldsets, links, documents composés, métadonnées de pagination, c'est beaucoup de boilerplate à écrire à la main et facile à rater subtilement. Laravel 13 embarque un JsonApiResource officiel qui produit une réponse conforme à la spec, y compris le bon content type, à partir d'une simple déclaration du type, de l'id, des attributs et des relations.
class UserResource extends JsonApiResource
{
public function toArray(Request $request): array
{
return [
'type' => 'users',
'id' => (string) $this->id,
'attributes' => [
'name' => $this->name,
'email' => $this->email,
],
];
}
}Cela ne compte que si vous ciblez vraiment la spec JSON:API, en général parce qu'un client ou une norme l'exige. Pour une API REST simple, les Eloquent API Resources existantes sont plus simples et il n'y a aucune raison de changer.
CSRF renforcé avec PreventRequestForgery
Le middleware de protection contre la falsification de requêtes a été retravaillé et renommé PreventRequestForgery. Il ajoute une vérification basée sur l'origine en plus du contrôle par token, ce qui ferme une classe de contournement cross-origin, utile maintenant que davantage d'applications Laravel exposent une API consommée côte à côte par une SPA first-party et un client mobile. Les forms Blade standards continuent de fonctionner sans changement ; ce qu'il faut vérifier à la migration, c'est tout middleware ou test custom qui référençait VerifyCsrfToken par son ancien nom.
Routage des queues centralisé
Plutôt que d'éparpiller des appels onQueue() et onConnection() dans les classes de job et les sites de dispatch, la nouvelle méthode Queue::route() déclare la connexion et la queue de chaque classe de job à un seul endroit, en général un service provider. On voit d'un coup d'oeil quels jobs tournent où, et on change le routage sans toucher aux jobs eux-mêmes.
// AppServiceProvider::boot()
Queue::route(SendInvoice::class, connection: 'redis', queue: 'invoices');
Queue::route(GenerateReport::class, connection: 'sqs', queue: 'reports');Comment migrer depuis Laravel 12
- ✓Passez PHP à 8.3 d'abord, comme un changement à part, et rendez ça vert en CI avant de toucher au framework.
- ✓Suivez le guide de migration officiel. Pour la plupart des apps, c'est un bump de version Composer plus une poignée de renommages et de déplacements de config.
- ✓Cherchez VerifyCsrfToken dans le codebase et remplacez les références par PreventRequestForgery.
- ✓Laissez le SDK IA, la config par attributs et JsonApiResource pour plus tard, sur des branches séparées. Aucun n'est requis par la migration elle-même.
Laravel 12 continue de recevoir des corrections de bugs jusqu'au 13 août 2026 et des correctifs de sécurité jusqu'au 24 février 2027. Rien ne presse. Migrez quand une des nouvelles fonctionnalités résout un problème que vous avez, ou pour rester sur la version majeure courante avant que la fenêtre de support ne se réduise.
Faut-il migrer maintenant ?
Si vous ne construisez pas de fonctionnalités IA ni d'API JSON:API publique, la différence au quotidien entre Laravel 12 et 13 est faible, et la syntaxe des attributs est le changement que la plupart des équipes ressentiront. La migration elle-même est à faible risque : surtout un bump Composer une fois PHP 8.3 en place. La raison de le faire, c'est de rester à jour, pas parce que Laravel 12 est sur le point de casser.
FAQ
Quelle est la différence entre Laravel 12 et Laravel 13 ?
Laravel 13 relève la version minimale de PHP à 8.3 et ajoute quatre fonctionnalités first-party notables : un SDK IA, des ressources JSON:API, la configuration par attributs et le routage centralisé des queues, plus un middleware CSRF renforcé. Tout le reste est incrémental.
Migrer vers Laravel 13, est-ce difficile ?
Pour une app typique, non. C'est surtout un bump de version Composer et quelques renommages. Le vrai prérequis est PHP 8.3, à traiter comme une étape séparée en premier.
Faut-il utiliser le SDK IA de Laravel ?
Non. C'est un package optionnel. Si vous utilisez déjà Prism ou un package OpenAI et que ça marche pour vous, il n'y a aucune obligation de changer.
Jusqu'à quand Laravel 12 est-il supporté ?
Corrections de bugs jusqu'à août 2026, correctifs de sécurité jusqu'à février 2027. Vous avez le temps, mais la fenêtre n'est pas ouverte indéfiniment.
Laravel 13 est une release évolutive : le même framework, avec le travail sur l'IA et la spec d'API rapatrié en interne et un coup de pouce vers la configuration explicite. Migrez pour rester à jour, et adoptez les nouvelles fonctionnalités quand elles gagnent leur place dans votre codebase.
Besoin d'aide sur ce sujet ? Développement Full Stack
Découvrir ce service →Articles liés
PHP 8.5 : les nouveautés qui comptent vraiment pour le backend
BackendConcevoir une API REST robuste et scalable avec Laravel
ArchitectureMigrer un monolithe Laravel vers des microservices
BackendAuthentification JWT en Laravel : le guide complet
BackendLaravel vs Node.js : quel backend choisir ?
