Skip to main content

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 in composer.json bij.
Gebruik je packages, werk die dan ook bij.
Installeer daarna de dependencies met het volgende commando.
Gebruik je Cashier Stripe, Passport, Sanctum, Spark Stripe of Telescope, dan moet je de migraties naar je applicatie publiceren.
Gebruik je de Laravel installer, werk die dan ook bij.
Had je eerder handmatig 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.php is vervallen en samengevoegd in bootstrap/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 met php 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 je User-model anders dan password, geef dat dan op via de property authPasswordName van het model.
Om deze functie uit te schakelen, voeg je het volgende toe aan 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.
Wil je niet al je bestaande migraties bijwerken, squash je migraties dan.

Wijziging van floating-point-types

Impact: hoog De migratiekolomtypes double en float zijn nu uniform over alle databases.
De methodes 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 driver mariadb gebruiken.

Wijziging van spatial types

Impact: laag De spatial kolomtypes zijn nu uniform over alle databases. Gebruik geometry of geography in plaats van methodes zoals point, lineString en polygon.
Wil je het type of het spatial reference system expliciet opgeven, geef dan 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
Gebruik voor database-inspectie de nieuwe native methodes zoals 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 de diffIn*-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 klassen GlobalLimit en Limit nemen nu seconden aan.
De property 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 geen providers-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 in composer.json bij naar ^4.0. Sanctum 4.0 laadt migraties niet meer automatisch. Publiceer ze met het volgende commando.
Werk ook de middleware-configuratie in config/sanctum.php bij.

Spatie Once-package

Impact: middel Laravel 11 biedt nu een eigen once-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

Laatst gewijzigd op 6 september 2026