Inleiding
Laravel 11 is uitgebracht in maart 2024. Deze gids beschrijft de stappen om te upgraden van Laravel 10.x naar 11.x.De geschatte tijd voor de upgrade is ongeveer 15 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
- Wijziging van de applicatiestructuur
- Wijziging van floating-point-types
- Behoud van attributen bij kolomwijzigingen
- Minimale SQLite-versie
- Sanctum-update
Impact: middel
- Carbon 3
- Wachtwoorden opnieuw hashen
- Rate limiting per seconde
- Spatie Once-package
Impact: laag
- Verwijdering van Doctrine DBAL
- De
casts-methode van Eloquent-modellen - Wijziging van spatial types
- Het
Enumerable-contract - Het
UserProvider-contract - Het
Authenticatable-contract
Upgradestappen
Dependencies bijwerken
Impact: hoog Werk de volgende dependencies incomposer.json bij.
doctrine/dbal toegevoegd, dan kun je die verwijderen. Laravel 11 heeft geen afhankelijkheid meer van deze package.
PHP-versievereiste
Impact: hoog Laravel 11 vereist PHP 8.2.0 of hoger. Bovendien vereist de HTTP-client van Laravel curl 7.34.0 of hoger.Wijziging van de applicatiestructuur
Impact: hoog In Laravel 11 is de standaard applicatiestructuur vereenvoudigd. Het aantal serviceproviders, middleware en configuratiebestanden is flink verminderd. Het wordt echter niet aanbevolen om bij het upgraden van een Laravel 10-applicatie naar Laravel 11 ook de applicatiestructuur te migreren. Laravel 11 is zo ontworpen dat het ook de applicatiestructuur van Laravel 10 ondersteunt. De belangrijkste structurele wijzigingen:- Middleware, exception handlers en routing worden nu direct geconfigureerd in
bootstrap/app.php app/Http/Kernel.phpis vervallen en samengevoegd inbootstrap/app.php- Het aantal standaard serviceproviders is verminderd; beheer gebeurt in
bootstrap/providers.php - Het aantal bestanden in de directory
config/is verminderd (indien nodig te publiceren metphp artisan config:publish)
Breaking changes
Authenticatie
Wachtwoorden opnieuw hashen
Impact: middel Laravel 11 hasht wachtwoorden automatisch opnieuw bij het inloggen wanneer de “work factor” van het hash-algoritme is gewijzigd. Heet het wachtwoordveld van jeUser-model anders dan password, geef dat dan op via de property authPasswordName van het model.
config/hashing.php.
Het UserProvider-contract
Impact: laag
Aan het contract Illuminate\Contracts\Auth\UserProvider is de methode rehashPasswordIfRequired toegevoegd. Heb je klassen die deze interface implementeren, voeg de methode dan toe.
Het Authenticatable-contract
Impact: laag
Aan het contract Illuminate\Contracts\Auth\Authenticatable is de methode getAuthPasswordName toegevoegd. Heb je klassen die deze interface implementeren, voeg de methode dan toe.
Database
Minimale SQLite-versie
Impact: hoog Gebruik je SQLite, dan is SQLite 3.26.0 of hoger vereist. Merk op dat in nieuwe Laravel 11-projecten de standaard databasedriver is gewijzigd naar SQLite.Behoud van attributen bij kolomwijzigingen
Impact: hoog Bij het wijzigen van een kolom moet je expliciet alle modifiers opgeven die je na de wijziging wilt behouden. Niet-opgegeven attributen worden verwijderd.Wijziging van floating-point-types
Impact: hoog De migratiekolomtypesdouble en float zijn nu uniform over alle databases.
unsignedDecimal, unsignedDouble en unsignedFloat zijn verwijderd. Wil je nog steeds het attribuut unsigned gebruiken, geef dat dan op via method chaining.
De casts-methode van Eloquent-modellen
Impact: laag
Op de basisklasse van Eloquent-modellen is nu een methode casts gedefinieerd. Heb je in een model van je applicatie een relatie met de naam casts gedefinieerd, dan botst die naam en moet je die wijzigen.
Dedicated MariaDB-driver
Impact: zeer laag Laravel 11 heeft een dedicated databasedriver voor MariaDB toegevoegd. Verbind je met MariaDB, dan kun je in de configuratie de drivermariadb gebruiken.
Wijziging van spatial types
Impact: laag De spatial kolomtypes zijn nu uniform over alle databases. Gebruikgeometry of geography in plaats van methodes zoals point, lineString en polygon.
subtype en srid mee.
Verwijdering van Doctrine DBAL
Impact: laag Laravel heeft de afhankelijkheid van Doctrine DBAL laten vallen. De volgende klassen en methodes zijn verwijderd.Schema\Builder::useNativeSchemaOperationsIfPossible()Connection::getDoctrineConnection()Connection::getDoctrineSchemaManager()Connection::registerDoctrineType()DatabaseManager::registerDoctrineType()- De klasse
Schema\Grammars\ChangeColumn - De klasse
Schema\Grammars\RenameColumn
Schema::getTables(), Schema::getColumns(), Schema::getIndexes() en Schema::getForeignKeys().
Datums
Carbon 3
Impact: middel Laravel 11 ondersteunt zowel Carbon 2 als Carbon 3. Let er bij een upgrade naar Carbon 3 op dat dediffIn*-methodes nu floating-point-getallen teruggeven en dat negatieve waarden de tijdsrichting aangeven.
Rate limiting
Rate limiting per seconde
Impact: middel Laravel 11 ondersteunt rate limiting per seconde in plaats van per minuut. De constructors van de klassenGlobalLimit en Limit nemen nu seconden aan.
decayMinutes van de klasse Limit is hernoemd naar decaySeconds en werkt nu in seconden.
Ook de constructors van ThrottlesExceptions en ThrottlesExceptionsWithRedis nemen nu seconden aan.
Packages
Serviceproviders publiceren
Impact: zeer laag Nieuwe Laravel 11-applicaties hebben geenproviders-array in config/app.php. Publiceert je package serviceproviders, gebruik dan de methode ServiceProvider::addProviderToBootstrapFile.
Sanctum
Sanctum-update
Impact: hoog Laravel 11 ondersteunt Sanctum 3.x niet. Werk de Sanctum-dependency incomposer.json bij naar ^4.0.
Sanctum 4.0 laadt migraties niet meer automatisch. Publiceer ze met het volgende commando.
config/sanctum.php bij.
Spatie Once-package
Impact: middel Laravel 11 biedt nu een eigenonce-functie. Gebruik je de package spatie/once, verwijder die dan uit composer.json om conflicten te voorkomen.
Samenvatting
Laravel 11 is een versie met grote structurele wijzigingen, maar omdat de applicatiestructuur van Laravel 10 gewoon blijft werken, kun je stapsgewijs migreren.Referenties
- Officiële upgradegids (Engels)
- Diff van de laravel/laravel-repository (10.x → 11.x)
- Laravel Shift — communitydienst die upgrades automatiseert
- Carbon 3-changelog