Einleitung
Laravel 10 wurde am 14. Februar 2023 veröffentlicht. Dieser Leitfaden beschreibt die Upgrade-Schritte von Laravel 9.x auf 10.x.Der geschätzte Zeitaufwand liegt bei etwa 10 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
- Aktualisierung von minimum-stability
Auswirkung: Mittel
- Änderungen an Datenbank-Expressions
- Entfall der
$dates-Property am Model - Monolog 3
- Redis-Cache-Tags
- Änderungen beim Service-Mocking
- Sprachverzeichnis
Auswirkung: Niedrig
- Meldungen bei Closure-basierten Validierungsregeln
- Methode
afterin FormRequests - Public-Path-Binding
- Konstruktor von
QueryException - Rückgabewert des Rate Limiters
- Entfall der Methode
Redirect::home - Entfall der Methode
Bus::dispatchNow - Methode
registerPolicies - ULID-Spalte
Upgrade-Schritte
Abhängigkeiten aktualisieren
Auswirkung: Hoch Aktualisieren Sie incomposer.json folgende Abhängigkeiten.
minimum-stability aktualisieren
Auswirkung: Hoch Setzen Sieminimum-stability in composer.json auf stable. Da stable der Default ist, können Sie die Angabe auch entfernen.
PHP-Version
Auswirkung: Hoch Laravel 10 benötigt PHP 8.1.0 oder höher und Composer 2.2.0 oder höher.Breaking Changes
Anwendung
Public-Path-Binding
Auswirkung: Niedrig Wenn Sie den Public Path durch Binden vonpath.public an den Container angepasst haben, wechseln Sie auf die Methode usePublicPath von Illuminate\Foundation\Application.
Autorisierung
Methode registerPolicies
Auswirkung: Niedrig
Die Methode registerPolicies im AuthServiceProvider wird jetzt automatisch vom Framework aufgerufen. Sie können den Aufruf aus boot entfernen.
Cache
Redis-Cache-Tags
Auswirkung: MittelCache::tags() wird nur noch für Anwendungen empfohlen, die Memcached nutzen. Wenn Sie Redis als Cache-Treiber verwenden, prüfen Sie einen Umstieg auf Memcached.
Datenbank
Änderungen an Datenbank-Expressions
Auswirkung: Mittel Die durchDB::raw erzeugten Datenbank-Expressions wurden neu implementiert. Zum Auslesen des rohen String-Werts verwenden Sie nun getValue(Grammar $grammar); ein Cast per (string) ist nicht mehr möglich.
Konstruktor von QueryException
Auswirkung: Sehr niedrig
Der erste Konstruktor-Parameter von Illuminate\Database\QueryException ist nun ein String mit dem Connection-Namen. Werfen Sie die Exception manuell, passen Sie den Code entsprechend an.
ULID-Spalte
Auswirkung: Niedrig Wenn Sie in Migrationenulid ohne Argument aufrufen, heißt die Spalte nun ulid. In früheren Releases wurde stattdessen fälschlich eine uuid-Spalte erzeugt.
Eloquent
$dates-Property am Model
Auswirkung: Mittel
Die veraltete Property $dates an Eloquent-Modellen wurde entfernt. Verwenden Sie $casts.
Lokalisierung
Sprachverzeichnis
Auswirkung: Keine Bestehende Anwendungen sind nicht betroffen; im neuen Skelett von Laravel ist das Verzeichnislang standardmäßig nicht enthalten. Bei Bedarf veröffentlichen Sie es per Artisan.
Logging
Monolog 3
Auswirkung: Mittel Die Monolog-Abhängigkeit von Laravel wurde auf Monolog 3.x aktualisiert. Wenn Sie Monolog direkt in Ihrer Anwendung verwenden, konsultieren Sie den Monolog-Upgrade-Guide. Für Drittanbieter-Logging-Dienste wie BugSnag oder Rollbar benötigen Sie möglicherweise Versionen, die Monolog 3.x und Laravel 10.x unterstützen.Queue
Entfall der Methode Bus::dispatchNow
Auswirkung: Niedrig
Die veralteten Methoden Bus::dispatchNow und dispatch_now wurden entfernt. Verwenden Sie Bus::dispatchSync bzw. dispatch_sync.
Routing
Middleware-Aliases
Auswirkung: Optional In neuen Laravel-Anwendungen heißt die Property$routeMiddleware der Klasse App\Http\Kernel nun $middlewareAliases. Die Übernahme in bestehende Anwendungen ist optional.
Rückgabewert des Rate Limiters
Auswirkung: Niedrig Beim Aufruf vonRateLimiter::attempt wird der Rückgabewert der übergebenen Closure jetzt direkt zurückgereicht. Wenn nichts oder null zurückgegeben wird, ist der Rückgabewert true.
Entfall der Methode Redirect::home
Auswirkung: Sehr niedrig
Die veraltete Methode Redirect::home wurde entfernt. Leiten Sie stattdessen explizit auf eine benannte Route um.
Testing
Service-Mocking
Auswirkung: Mittel Das veraltete TraitMocksApplicationServices wurde aus dem Framework entfernt. Es stellte Testmethoden wie expectsEvents, expectsJobs und expectsNotifications bereit.
Wenn Sie diese Methoden verwenden, migrieren Sie zu Event::fake, Bus::fake bzw. Notification::fake.
Validierung
Meldungen bei Closure-basierten Validierungsregeln
Auswirkung: Sehr niedrig Wenn Sie den$fail-Callback in einer Closure-basierten Custom-Rule mehrfach aufrufen, werden die Meldungen nicht mehr überschrieben, sondern in einem Array gesammelt.
Der $fail-Callback gibt zudem nun ein Objekt zurück. Wenn Sie den Rückgabewert der Validierungsclosure typhinten, passen Sie das an.
Methode after in FormRequests
Auswirkung: Sehr niedrig
Die Methode after in FormRequests ist nun für Laravel reserviert. Wenn Sie in FormRequests eine after-Methode definieren, benennen Sie sie um oder nutzen Sie das neue „After-Validation”-Feature.
Fazit
Laravel 10 besteht aus vergleichsweise kleinen Änderungen; das Upgrade lässt sich zügig durchführen.| Änderung | Auswirkung | Maßnahme |
|---|---|---|
Abhängigkeiten in composer.json aktualisieren | Hoch | Auf laravel/framework ^10.0 heben |
| PHP 8.1 / Composer 2.2 erforderlich | Hoch | Versionen prüfen und aktualisieren |
| Änderungen an Datenbank-Expressions | Mittel | (string)-Cast durch getValue() ersetzen |
Entfall der $dates-Property | Mittel | Auf $casts migrieren |
| Monolog 3 | Mittel | Bei Direktnutzung den Upgrade-Guide beachten |
| Redis-Cache-Tags | Mittel | Umstieg auf Memcached prüfen |
Entfall von MocksApplicationServices | Mittel | Auf Event::fake usw. migrieren |
Entfall von Bus::dispatchNow | Niedrig | Durch Bus::dispatchSync ersetzen |
| ULID-Spaltenname | Niedrig | Aufrufe von ulid() in Migrationen prüfen |
Entfall von Redirect::home | Sehr niedrig | Durch Redirect::route('home') ersetzen |
Referenzen
- Offizieller Upgrade-Guide (Englisch)
- Diff im Repository laravel/laravel (9.x → 10.x)
- Laravel Shift – Community-Dienst zur Upgrade-Automatisierung
- Sanctum-Upgrade-Guide (2.x → 3.x)
- Monolog-3.x-Upgrade-Guide