Einleitung
Laravel 11 wurde im März 2024 veröffentlicht. Dieser Leitfaden beschreibt die Upgrade-Schritte von Laravel 10.x auf 11.x.Der geschätzte Zeitaufwand liegt bei etwa 15 Minuten. Die tatsächliche Auswirkung der Breaking Changes hängt jedoch vom Umfang und den genutzten Funktionen ab.
Automatisches Upgrade mit Laravel Shift
Sie können das Upgrade auch mit Laravel Shift automatisieren. Shift aktualisiert Abhängigkeiten und Konfigurationsdateien der Anwendung automatisch.Änderungen nach Auswirkung
Auswirkung: Hoch
- Aktualisierung der Abhängigkeiten
- Änderungen der Anwendungsstruktur
- Änderung der Fließkomma-Typen
- Attributerhalt beim Ändern von Spalten
- SQLite-Mindestversion
- Aktualisierung von Sanctum
Auswirkung: Mittel
- Carbon 3
- Rehash von Passwörtern
- Rate Limits pro Sekunde
- Paket Spatie Once
Auswirkung: Niedrig
- Entfernung von Doctrine DBAL
- Methode
castsan Eloquent-Modellen - Änderungen bei räumlichen Typen
- Contract
Enumerable - Contract
UserProvider - Contract
Authenticatable
Upgrade-Schritte
Abhängigkeiten aktualisieren
Auswirkung: Hoch Aktualisieren Sie incomposer.json folgende Abhängigkeiten.
doctrine/dbal manuell hinzugefügt hatten, können Sie es entfernen. In Laravel 11 gibt es keine Abhängigkeit mehr zu diesem Paket.
PHP-Version
Auswirkung: Hoch Laravel 11 benötigt PHP 8.2.0 oder höher. Der HTTP-Client von Laravel benötigt zudem curl 7.34.0 oder höher.Änderungen der Anwendungsstruktur
Auswirkung: Hoch In Laravel 11 wurde die Default-Struktur der Anwendung vereinfacht. Die Zahl der Service Provider, Middlewares und Konfigurationsdateien wurde deutlich reduziert. Beim Upgrade einer Laravel-10-Anwendung auf 11 wird nicht empfohlen, die Struktur mitzumigrieren. Laravel 11 ist so gestaltet, dass die Struktur einer Laravel-10-Anwendung weiter funktioniert. Wichtige Strukturänderungen:- Middleware, Exception-Handling und Routing werden nun direkt in
bootstrap/app.phpkonfiguriert app/Http/Kernel.phpentfällt und wurde inbootstrap/app.phpintegriert- Die Anzahl der Default-Service-Provider ist reduziert; sie werden in
bootstrap/providers.phpverwaltet - Die Zahl der Dateien in
config/ist reduziert (bei Bedarf perphp artisan config:publishveröffentlichen)
Breaking Changes
Authentifizierung
Rehash von Passwörtern
Auswirkung: Mittel In Laravel 11 wird das Passwort beim Anmelden automatisch neu gehasht, wenn sich der „Work Factor” des Hash-Algorithmus geändert hat. Wenn das Passwortfeld IhresUser-Modells nicht password heißt, geben Sie den Namen über die Model-Property authPasswordName an.
config/hashing.php:
Contract UserProvider
Auswirkung: Niedrig
Der Contract Illuminate\Contracts\Auth\UserProvider erhielt die Methode rehashPasswordIfRequired. Wenn Sie diesen Contract selbst implementieren, ergänzen Sie die Methode.
Contract Authenticatable
Auswirkung: Niedrig
Der Contract Illuminate\Contracts\Auth\Authenticatable erhielt die Methode getAuthPasswordName. Wenn Sie diesen Contract selbst implementieren, ergänzen Sie die Methode.
Datenbank
SQLite-Mindestversion
Auswirkung: Hoch Wenn Sie SQLite nutzen, ist SQLite 3.26.0 oder höher erforderlich. In neuen Laravel-11-Projekten ist SQLite außerdem der Default-Datenbanktreiber.Attributerhalt beim Ändern von Spalten
Auswirkung: Hoch Beim Ändern einer Spalte müssen Sie alle nach der Änderung beizubehaltenden Modifier explizit angeben. Nicht angegebene Attribute werden verworfen.Änderung der Fließkomma-Typen
Auswirkung: Hoch Die Migrationstypendouble und float wurden über alle Datenbanken hinweg vereinheitlicht.
unsignedDecimal, unsignedDouble und unsignedFloat wurden entfernt. Für das Attribut unsigned verwenden Sie das Method-Chaining.
Methode casts an Eloquent-Modellen
Auswirkung: Niedrig
In der Eloquent-Basisklasse ist nun eine Methode casts definiert. Wenn Ihr Modell eine Relation namens casts besitzt, kommt es zum Namenskonflikt und Sie müssen umbenennen.
Dedizierter Treiber für MariaDB
Auswirkung: Sehr niedrig Laravel 11 bringt einen dedizierten Datenbanktreiber für MariaDB mit. Für MariaDB-Verbindungen können Sie den Treibermariadb verwenden.
Änderungen bei räumlichen Typen
Auswirkung: Niedrig Räumliche Spaltentypen wurden datenbankübergreifend vereinheitlicht. Nutzen Sie statt Methoden wiepoint, lineString, polygon die Methoden geometry oder geography.
subtype und srid.
Entfernung von Doctrine DBAL
Auswirkung: Niedrig Die Abhängigkeit zu Doctrine DBAL wurde aus Laravel entfernt. Folgende Klassen/Methoden fielen weg:Schema\Builder::useNativeSchemaOperationsIfPossible()Connection::getDoctrineConnection()Connection::getDoctrineSchemaManager()Connection::registerDoctrineType()DatabaseManager::registerDoctrineType()- Klasse
Schema\Grammars\ChangeColumn - Klasse
Schema\Grammars\RenameColumn
Schema::getTables(), Schema::getColumns(), Schema::getIndexes() und Schema::getForeignKeys().
Datum
Carbon 3
Auswirkung: Mittel Laravel 11 unterstützt sowohl Carbon 2 als auch Carbon 3. Beim Upgrade auf Carbon 3 beachten Sie, dassdiffIn*-Methoden nun Fließkommazahlen zurückgeben und die Richtung mit negativen Werten ausdrücken.
Rate Limiting
Rate Limits pro Sekunde
Auswirkung: Mittel Laravel 11 unterstützt Rate Limits nicht mehr nur pro Minute, sondern auch pro Sekunde. Die Konstruktoren der KlassenGlobalLimit und Limit erwarten nun Sekunden.
decayMinutes der Klasse Limit wurde in decaySeconds umbenannt und arbeitet in Sekunden.
Auch die Konstruktoren von ThrottlesExceptions und ThrottlesExceptionsWithRedis erwarten Sekunden.
Pakete
Service Provider veröffentlichen
Auswirkung: Sehr niedrig In neuen Laravel-11-Anwendungen existiert keinproviders-Array mehr in config/app.php. Wenn Ihr Paket einen Service Provider veröffentlicht, verwenden Sie die Methode ServiceProvider::addProviderToBootstrapFile.
Sanctum
Sanctum-Update
Auswirkung: Hoch Laravel 11 unterstützt Sanctum 3.x nicht mehr. Setzen Sie die Sanctum-Abhängigkeit incomposer.json auf ^4.0.
Sanctum 4.0 lädt Migrationen nicht mehr automatisch. Veröffentlichen Sie sie:
config/sanctum.php:
Paket Spatie Once
Auswirkung: Mittel Laravel 11 bringt eine eigeneonce-Funktion mit. Wenn Sie das Paket spatie/once verwenden, entfernen Sie es aus composer.json, um Konflikte zu vermeiden.
Fazit
Laravel 11 enthält große strukturelle Änderungen, aber die Struktur einer Laravel-10-Anwendung funktioniert weiterhin, sodass Sie schrittweise migrieren können.| Änderung | Auswirkung | Maßnahme |
|---|---|---|
Abhängigkeiten in composer.json aktualisieren | Hoch | Auf laravel/framework ^11.0 heben |
| PHP 8.2 erforderlich | Hoch | PHP-Version prüfen |
| Attributerhalt beim Ändern von Spalten | Hoch | Nutzungsstellen von change() prüfen |
| Änderung der Fließkomma-Typen | Hoch | Definitionen von double/float prüfen |
| SQLite 3.26.0+ erforderlich | Hoch | SQLite-Version prüfen |
Sanctum ^4.0 | Hoch | Migrationen veröffentlichen |
| Carbon 3 | Mittel | Rückgabewerte von diffIn* prüfen |
| Rate Limits pro Sekunde | Mittel | decayMinutes durch decaySeconds ersetzen |
| Entfernung von Doctrine DBAL | Niedrig | Auf native Schema-Methoden umsteigen |
Referenzen
- Offizieller Upgrade-Guide (Englisch)
- Diff im Repository laravel/laravel (10.x → 11.x)
- Laravel Shift – Community-Dienst zur Upgrade-Automatisierung
- Carbon-3-Changelog