Skip to main content

Inleiding

Laravel 10 is uitgebracht op 14 februari 2023. Deze gids beschrijft de stappen om te upgraden van Laravel 9.x naar 10.x.
De geschatte tijd voor de upgrade is ongeveer 10 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
  • minimum-stability bijwerken

Impact: middel

  • Wijziging van database-expressies
  • Verwijdering van de $dates-property van modellen
  • Monolog 3
  • Redis-cachetags
  • Wijziging van servicemocking
  • De taaldirectory

Impact: laag

  • Berichten van closure-validatieregels
  • De after-methode van form requests
  • De public-path-binding
  • De QueryException-constructor
  • De returnwaarde van de rate limiter
  • Verwijdering van de methode Redirect::home
  • Verwijdering van de methode Bus::dispatchNow
  • De methode registerPolicies
  • ULID-kolommen

Upgradestappen

Dependencies bijwerken

Impact: hoog Werk de volgende dependencies in composer.json bij.
Gebruik je packages, werk die dan ook bij.
Gebruik je PHPUnit 10, werk dan ook het volgende bij.
Gebruik je PHPUnit 10, verwijder dan het attribuut processUncoveredFiles uit de <coverage>-sectie van phpunit.xml.
Installeer daarna de dependencies met het volgende commando.
Raadpleeg voor de upgrade van Sanctum 2.x naar 3.x ook de Sanctum 3.x-upgradegids.

minimum-stability bijwerken

Impact: hoog Werk minimum-stability in composer.json bij naar stable. Omdat de defaultwaarde stable is, mag je deze instelling ook verwijderen.

PHP-versievereiste

Impact: hoog Laravel 10 vereist PHP 8.1.0 of hoger en Composer 2.2.0 of hoger.

Breaking changes

Applicatie

De public-path-binding

Impact: laag Pas je het publieke pad aan door path.public aan de container te binden, gebruik dan voortaan de methode usePublicPath van Illuminate\Foundation\Application.

Autorisatie

De methode registerPolicies

Impact: laag De methode registerPolicies van de AuthServiceProvider wordt nu automatisch door het framework aangeroepen. Je kunt de aanroep van deze methode uit je boot-methode verwijderen.

Cache

Redis-cachetags

Impact: middel Cache::tags() wordt alleen nog aanbevolen voor applicaties die Memcached gebruiken. Gebruik je Redis als cachedriver, overweeg dan een migratie naar Memcached.

Database

Wijziging van database-expressies

Impact: middel Database-expressies die met DB::raw worden gegenereerd zijn herschreven. Om de rauwe stringwaarde van een expressie op te halen, moet je nu de methode getValue(Grammar $grammar) gebruiken. Casten naar (string) is niet meer mogelijk.
Eindgebruikersapplicaties merken hier doorgaans niets van, maar cast je database-expressies naar strings, dan is een update nodig.

De QueryException-constructor

Impact: zeer laag Aan de constructor van Illuminate\Database\QueryException is als eerste argument de verbindingsnaam (string) toegevoegd. Gooi je deze exceptie handmatig, pas je code dan aan.

ULID-kolommen

Impact: laag Roep je in een migratie de methode ulid zonder argumenten aan, dan heet de kolom nu ulid. In eerdere releases werd bij een aanroep zonder argumenten per abuis een kolom met de naam uuid aangemaakt.

Eloquent

De $dates-property van modellen

Impact: middel De deprecated property $dates van Eloquent-modellen is verwijderd. Gebruik de property $casts.

Lokalisatie

De taaldirectory

Impact: geen Dit heeft geen invloed op bestaande applicaties, maar de skeleton van nieuwe Laravel-applicaties bevat standaard geen lang-directory meer. Indien nodig kun je hem publiceren met een Artisan-commando.

Logging

Monolog 3

Impact: middel De Monolog-dependency van Laravel is bijgewerkt naar Monolog 3.x. Gebruik je Monolog direct in je applicatie, bekijk dan de upgradegids van Monolog. Gebruik je third-party loggingdiensten zoals BugSnag of Rollbar, dan kan een upgrade naar een versie die Monolog 3.x en Laravel 10.x ondersteunt nodig zijn.
De wijzigingen in Monolog 3.x vind je in de Monolog 3.x-upgradegids.

Queue

Verwijdering van de methode Bus::dispatchNow

Impact: laag De deprecated methodes Bus::dispatchNow en dispatch_now zijn verwijderd. Gebruik de methodes Bus::dispatchSync en dispatch_sync.

Routing

Middleware-aliassen

Impact: optioneel In nieuwe Laravel-applicaties is de property $routeMiddleware van de klasse App\Http\Kernel hernoemd naar $middlewareAliases. Het toepassen hiervan op bestaande applicaties is optioneel.

De returnwaarde van de rate limiter

Impact: laag Bij het aanroepen van de methode RateLimiter::attempt wordt nu de returnwaarde van de meegegeven closure ongewijzigd teruggegeven. Geef je niets of null terug, dan wordt true teruggegeven.

Verwijdering van de methode Redirect::home

Impact: zeer laag De deprecated methode Redirect::home is verwijderd. Redirect expliciet naar een benoemde route.

Testen

Servicemocking

Impact: middel De deprecated trait MocksApplicationServices is uit het framework verwijderd. Deze trait leverde testmethodes zoals expectsEvents, expectsJobs en expectsNotifications. Gebruik je deze methodes, migreer dan naar respectievelijk Event::fake, Bus::fake en Notification::fake.

Validatie

Berichten van closure-validatieregels

Impact: zeer laag Roep je in een closure-gebaseerde custom validatieregel de $fail-callback meerdere keren aan, dan worden de berichten nu aan een array toegevoegd in plaats van overschreven. Daarnaast geeft de $fail-callback nu een object terug. Typehint je de returnwaarde van je validatieclosure, dan moet je die bijwerken.

De after-methode van form requests

Impact: zeer laag De methode after binnen form requests is nu gereserveerd door Laravel. Definieer je een after-methode in een form request, hernoem die dan of pas hem aan om de nieuwe “after validation”-functionaliteit te benutten.

Samenvatting

Laravel 10 bestaat uit relatief kleine wijzigingen en de upgrade is snel afgerond.

Referenties

Laatst gewijzigd op 6 september 2026