Inleiding
Laravel 12 is uitgebracht in februari 2025. Deze gids beschrijft de stappen om te upgraden van Laravel 11.x naar 12.x.De geschatte tijd voor de upgrade is ongeveer 5 minuten. De impact van breaking changes op je applicatie hangt echter af van de omvang en de functies die je gebruikt.
Automatisch upgraden met Laravel Shift
Je kunt de upgrade ook automatiseren met Laravel Shift. Shift werkt de dependencies en configuratiebestanden van je applicatie automatisch bij.Wijzigingen per impactniveau
Impact: hoog
- Dependencies bijwerken
- De Laravel installer bijwerken
Impact: middel
- De Eloquent
HasUuids-trait en UUIDv7
Impact: laag
- Carbon 3
- Resultaatindex-mapping van Concurrency
- Klasse-afhankelijkheden oplossen in de container
- SVG uitgesloten bij afbeeldingsvalidatie
- Standaard rootpad van de lokale filesystem-disk
- Multi-schema database-inspectie
- Mergen van geneste array-requests
Upgradestappen
Dependencies bijwerken
Impact: hoog Werk de volgende dependencies incomposer.json bij.
De Laravel installer bijwerken
Impact: hoog Gebruik je de Laravel installer CLI om nieuwe Laravel-applicaties aan te maken, werk hem dan bij naar een versie die Laravel 12.x en de nieuwe starter kits ondersteunt. Geïnstalleerd viacomposer global require:
php.new? Voer dan het herinstallatiecommando voor jouw besturingssysteem uit.
- macOS
- Windows PowerShell
- Linux
De nieuwe starter kits
Laravel 12 introduceerde nieuwe starter kits die de klassieke Breeze en Jetstream vervangen. Voer jelaravel new uit, dan kun je interactief een frontendstack kiezen.
Beschikbare starter kits:
- React — Inertia 2, React 19, TypeScript, Tailwind 4, shadcn/ui
- Vue — Inertia 2, Vue Composition API, TypeScript, Tailwind 4, shadcn-vue
- Svelte — Inertia 2, Svelte 5, TypeScript, Tailwind 4, shadcn-svelte
- Livewire — Livewire, Tailwind 4, Flux UI
Upgrade je een bestaande applicatie, dan hoef je geen starter kit opnieuw op te zetten. Deze wijziging is bedoeld voor nieuwe projecten.
Breaking changes
Eloquent
De HasUuids-trait en UUIDv7
Impact: middel
De HasUuids-trait geeft nu UUID v7 (geordende UUID’s) terug. Wil je het eerdere gedrag met geordende UUID v4 behouden, stap dan over op de trait HasVersion4Uuids.
HasVersion7Uuids, wijzig die dan naar de trait HasUuids (die zich nu hetzelfde gedraagt).
Validatie
SVG uitgesloten bij afbeeldingsvalidatie
Impact: laag De validatieregelimage staat standaard geen SVG’s meer toe. Wil je SVG’s toestaan, geef dat dan expliciet op.
Storage
Standaard rootpad van de lokale filesystem-disk
Impact: laag Als je delocal-disk niet expliciet definieert in de filesystems-configuratie, is het standaard rootpad gewijzigd van storage/app naar storage/app/private.
Om het eerdere gedrag te behouden, definieer je de local-disk expliciet in het configuratiebestand.
Database
Multi-schema database-inspectie
Impact: laagSchema::getTables(), Schema::getViews() en Schema::getTypes() geven nu standaard de resultaten van alle schema’s terug. Wil je alleen een specifiek schema, geef dan het argument schema mee.
Schema::getTableListing() geeft nu standaard schema-gekwalificeerde tabelnamen terug.
Wijziging van database-constructorsignaturen
Impact: zeer laag De constructors vanIlluminate\Database\Schema\Blueprint en Illuminate\Database\Grammar vereisen nu een Connection-instantie als eerste argument.
Haal de tabelprefix direct op via de connection.
Concurrency
Resultaatindex-mapping
Impact: laag Geef je een associatieve array door aanConcurrency::run(), dan worden de resultaten nu teruggegeven onder de bijbehorende keys.
Container
Standaardwaarden bij het oplossen van klasse-afhankelijkheden
Impact: laag De DI-container respecteert nu de standaardwaarden van klasseproperties bij het oplossen van klasse-instanties.Requests
Mergen van geneste array-requests
Impact: laag Met$request->mergeIfMissing() kun je nu geneste arraydata mergen met dot-notatie. Voorheen werden dot-notatiekeys letterlijk als toplevel-keys aangemaakt.
Routing
Routeprioriteit
Impact: laag Het gedrag bij meerdere routes met dezelfde naam is nu uniform, met en zonder cache. Ook bij routing zonder cache krijgt nu de eerst geregistreerde route voorrang in plaats van de laatste.Authenticatie
Wijziging van de DatabaseTokenRepository-constructor
Impact: zeer laag
De constructor van Illuminate\Auth\Passwords\DatabaseTokenRepository neemt de parameter $expires nu aan in seconden in plaats van minuten.
Carbon 3
Impact: laag De ondersteuning voor Carbon 2.x is verwijderd. Alle Laravel 12-applicaties vereisen Carbon 3.x.Samenvatting
Laravel 12 is een versie waarnaar je relatief soepel kunt upgraden. De belangrijkste aandachtspunten:Referenties
- Officiële upgradegids (Engels)
- Diff van de laravel/laravel-repository (11.x → 12.x)
- De nieuwe starter kits
- Laravel Shift — communitydienst die upgrades automatiseert
- Carbon 3-migratiegids