Einleitung
Dieser Leitfaden beschreibt, wie Sie von der alten Anwendungsstruktur (mitKernel-Klassen und mehreren Service Providern) aus Laravel 10 auf die Slim Application Skeleton ab Laravel 11 umsteigen.
Wann eine Migration sinnvoll ist
In folgenden Fällen ist eine Migration überlegenswert:- Neue Team-Mitglieder sollen mit der offiziellen Doku leichter arbeiten können — deshalb wollen Sie das Projekt auf die aktuelle Standardstruktur bringen.
- Sie möchten die Konsistenz zu Paketen oder Starter-Kits wahren, die ab Laravel 11 neu entstanden sind.
- Sie möchten Konfigurationsdateien und Klassen aus der Alt-Struktur reduzieren und die Codebasis vereinfachen.
Voraussetzungen
Diese Anleitung setzt Folgendes voraus:- Der Laravel-Versions-Upgrade ist abgeschlossen (
laravel/framework ^11.0oder höher). - Bestehende Tests laufen alle grün.
- Sie kennen die Anwendungsstruktur ab Laravel 11 (siehe Anwendungsstruktur ab Laravel 11).
Migrationsbeispiel
Wir zeigen, wie ein mit Laravel 10 + Breeze (Blade-Stack) erstelltes Projekt Breeze behält und nur die Anwendungsstruktur migriert.bootstrap/app.php ersetzen
Die alte Neu (Laravel 11 und höher):
bootstrap/app.php erzeugte die $app-Instanz und registrierte die Kernels. Ersetzen Sie das durch die
Application::configure()-Chain.Alt (Laravel 10):Die Callbacks
withMiddleware() und withExceptions() sind die neuen Ablageorte für die Konfiguration aus den Kernel-Dateien, die wir in den nächsten Schritten löschen. Lassen Sie sie zunächst leer und ergänzen Sie sie im weiteren Verlauf.HTTP-Kernel (app/Http/Kernel.php) löschen
app/Http/Kernel.php definierte globale Middleware, Middleware-Gruppen und Middleware-Aliase.Alt (app/Http/Kernel.php):app/Http/Kernel.php einfach löschen.Bei eigenen Anpassungen (zusätzliche/ausgeschlossene Middleware) übertragen Sie diese in withMiddleware() in bootstrap/app.php, bevor Sie die Datei entfernen.app/Http/Kernel.php.In Laravel 11 können Sie auch Standard-Middleware-Klassen wie
TrustProxies, EncryptCookies und VerifyCsrfToken aus app/Http/Middleware/ entfernen. Diese sind ins Framework integriert; ohne Anpassungen sind die Dateien überflüssig.Console-Kernel (app/Console/Kernel.php) löschen
app/Console/Kernel.php war für die Scheduler-Definition und das Autoloading von Commands zuständig.Alt (app/Console/Kernel.php):app/Console/Commands/ wird automatisch gescannt.Die Scheduler-Definition verschieben Sie nach routes/console.php oder in withSchedule() in bootstrap/app.php.app/Console/Kernel.php.Löschen Sie keine eigenen Artisan-Command-Dateien im Verzeichnis
app/Console/. Belassen Sie die Command-Dateien und entfernen Sie nur die Kernel-Klasse.Exception-Handler (app/Exceptions/Handler.php) löschen
app/Exceptions/Handler.php steuerte das Reporten und Rendern von Exceptions.Alt (app/Exceptions/Handler.php):withExceptions() in bootstrap/app.php und löschen dann die Datei.$dontFlash-Einträge lassen sich ebenfalls übertragen.app/Exceptions/Handler.php.RouteServiceProvider entfernen und Routen-Registrierung migrieren
app/Providers/RouteServiceProvider.php hat Routen-Dateien geladen und Rate Limits konfiguriert.Alt (app/Providers/RouteServiceProvider.php):withRouting() in bootstrap/app.php.AppServiceProvider::boot().HOME an anderer Stelle, ersetzen Sie sie durch eine URL-Zeichenkette oder verschieben Sie die Konstante in den AppServiceProvider.Nach der Migration löschen Sie app/Providers/RouteServiceProvider.php.Service Provider aufräumen
In Laravel 10 gab es standardmäßig fünf Service Provider. Fassen Sie diese im
Beispiel: Migration des Nachdem Sie die überflüssigen Provider-Dateien gelöscht haben, entfernen Sie das Legen Sie zusätzlich
AppServiceProvider.php zu einem zusammen.Zu entfernende Provider (Inhalte in AppServiceProvider verschieben, dann löschen):| Datei | Ziel |
|---|---|
app/Providers/AuthServiceProvider.php | Gate::policy() u. Ä. in AppServiceProvider::boot() |
app/Providers/BroadcastServiceProvider.php | Bei Broadcasting: withBroadcasting() in bootstrap/app.php |
app/Providers/EventServiceProvider.php | Event::listen() u. Ä. in AppServiceProvider::boot() |
app/Providers/RouteServiceProvider.php | Im vorigen Schritt bereits behandelt |
AuthServiceProvider:providers-Array aus config/app.php.bootstrap/providers.php an, um die neue Struktur zu bedienen.Existiert
bootstrap/providers.php, verwendet Laravel diese Datei vorrangig als Provider-Liste.Controller-Basisklasse aktualisieren
In Laravel 10 nutzte die Neu (Laravel 11 und höher):Die von den Traits gelieferten Funktionen ersetzen Sie wie folgt:
Nutzen bestehende Controller Methoden aus den Traits, können Sie entweder die einzelnen Controller anpassen oder die Traits in der
Controller-Basisklasse die Traits AuthorizesRequests und ValidatesRequests. Die neue Basisklasse in Laravel 11 ist eine schlichte abstrakte Klasse ohne diese Traits.Alt (Laravel 10):| Alte Vorgehensweise (per Trait) | Neue Vorgehensweise |
|---|---|
$this->validate($request, $rules) | $request->validate($rules) |
$this->authorize('update', $post) | Gate::authorize('update', $post) |
$this->authorizeResource(Post::class) | Kein einfaches Äquivalent in Laravel 11 — belassen Sie App\Http\Controllers\Controller in Laravel-10-Form |
Controller-Basisklasse belassen. Sie müssen nicht alles auf einmal ändern.Überflüssige config-Dateien entfernen
Dateien, die Sie nicht vom Standard abweichend geändert haben —
config/cors.php, config/hashing.php, config/view.php u. a. — können Sie entfernen. Angepasste Dateien belassen Sie.public/index.php aktualisieren
Diese Datei wurde für die neue Struktur überarbeitet; ersetzen Sie sie komplett.
tests/TestCase.php aktualisieren
Der Trait
CreatesApplication wird nicht mehr benötigt.
tests/CreatesApplication.php kann gelöscht werden..env, .env.example und phpunit.xml aktualisieren
CACHE_DRIVER heißt jetzt CACHE_STORE, und neue Einträge sind hinzugekommen. Passen Sie diese bei Bedarf an.
Da diese Änderungen Config-Dateien und die Produktivumgebung betreffen, gehen Sie umsichtig vor.
Sie müssen den Änderungen nicht zwanghaft folgen.Projektstruktur nach der Migration
Die Struktur nach der Migration sieht so aus (Änderungen zur alten Struktur hervorgehoben):Zusammenfassung
| Was migriert wird | Alter Ort | Neuer Ort |
|---|---|---|
| HTTP-Middleware | app/Http/Kernel.php | withMiddleware() in bootstrap/app.php |
| Exception-Handling | app/Exceptions/Handler.php | withExceptions() in bootstrap/app.php |
| Scheduler-Definition | app/Console/Kernel.php | routes/console.php |
| Routen-Registrierung | app/Providers/RouteServiceProvider.php | withRouting() in bootstrap/app.php |
| Provider-Liste | providers-Array in config/app.php | bootstrap/providers.php |
| Policy-Registrierung | app/Providers/AuthServiceProvider.php | Automatische Registrierung; manuell in AppServiceProvider::boot() |
| Event-Listener | app/Providers/EventServiceProvider.php | Automatische Registrierung; manuell in AppServiceProvider::boot() |