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-stabilitybijwerken
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 incomposer.json bij.
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 doorpath.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: middelCache::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 metDB::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.
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 methodeulid 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 geenlang-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.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 methodeRateLimiter::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 traitMocksApplicationServices 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
- Officiële upgradegids (Engels)
- Diff van de laravel/laravel-repository (9.x → 10.x)
- Laravel Shift — communitydienst die upgrades automatiseert
- Sanctum-upgradegids (2.x → 3.x)
- Monolog 3.x-upgradegids