Skip to main content

Einleitung

Dieser Leitfaden beschreibt, wie Sie von der alten Anwendungsstruktur (mit Kernel-Klassen und mehreren Service Providern) aus Laravel 10 auf die Slim Application Skeleton ab Laravel 11 umsteigen.
Die offizielle Dokumentation empfiehlt diese Migration nicht.
  • Die alte Laravel-10-Struktur läuft in Laravel 11 und höher weiter unverändert. Auch in aktuellen Versionen bis Laravel 13 gibt es keinen End-of-Life-Plan.
  • Die Migration ist vollständig optional — sie ist weder Pflicht noch Empfehlung.
  • Ohne tiefes Verständnis der Unterschiede zwischen alter und neuer Struktur raten wir dringend davon ab. Das ist Arbeit für Entwickler, die die Framework-Interna gut kennen.
  • Sichern Sie das Projekt vor der Migration, und stellen Sie sicher, dass alle Tests grün sind.

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.0 oder 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.
1

bootstrap/app.php ersetzen

Die alte bootstrap/app.php erzeugte die $app-Instanz und registrierte die Kernels. Ersetzen Sie das durch die Application::configure()-Chain.Alt (Laravel 10):
Neu (Laravel 11 und höher):
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.
2

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):
In Laravel 11 sind diese Middlewares bereits framework-intern als Defaults hinterlegt. Ohne eigene Anpassungen können Sie 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.
Nach dem Übertragen löschen Sie 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.
3

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):
Das Autoloading der Commands ist ab Laravel 11 nicht mehr nötig: app/Console/Commands/ wird automatisch gescannt.Die Scheduler-Definition verschieben Sie nach routes/console.php oder in withSchedule() in bootstrap/app.php.
Nach der Migration löschen Sie 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.
4

Exception-Handler (app/Exceptions/Handler.php) löschen

app/Exceptions/Handler.php steuerte das Reporten und Rendern von Exceptions.Alt (app/Exceptions/Handler.php):
Bei eigenen Anpassungen übertragen Sie diese in withExceptions() in bootstrap/app.php und löschen dann die Datei.
Zusätzlich definierte $dontFlash-Einträge lassen sich ebenfalls übertragen.
Nach dem Übertragen löschen Sie app/Exceptions/Handler.php.
5

RouteServiceProvider entfernen und Routen-Registrierung migrieren

app/Providers/RouteServiceProvider.php hat Routen-Dateien geladen und Rate Limits konfiguriert.Alt (app/Providers/RouteServiceProvider.php):
Die Registrierung der Routen-Dateien verschieben Sie nach withRouting() in bootstrap/app.php.
Rate Limits wandern in AppServiceProvider::boot().
Verwenden Sie die Konstante 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.
6

Service Provider aufräumen

In Laravel 10 gab es standardmäßig fünf Service Provider. Fassen Sie diese im AppServiceProvider.php zu einem zusammen.Zu entfernende Provider (Inhalte in AppServiceProvider verschieben, dann löschen):Beispiel: Migration des AuthServiceProvider:
Nachdem Sie die überflüssigen Provider-Dateien gelöscht haben, entfernen Sie das providers-Array aus config/app.php.
Legen Sie zusätzlich bootstrap/providers.php an, um die neue Struktur zu bedienen.
Existiert bootstrap/providers.php, verwendet Laravel diese Datei vorrangig als Provider-Liste.
7

Controller-Basisklasse aktualisieren

In Laravel 10 nutzte die Controller-Basisklasse die Traits AuthorizesRequests und ValidatesRequests. Die neue Basisklasse in Laravel 11 ist eine schlichte abstrakte Klasse ohne diese Traits.Alt (Laravel 10):
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 belassen. Sie müssen nicht alles auf einmal ändern.
Wenn von Breeze oder Jetstream generierte Auth-Controller $this->validate() oder $this->authorize() aufrufen, prüfen Sie das Verhalten unbedingt, bevor Sie die Basisklasse ändern.
8

Ü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.
9

public/index.php aktualisieren

Diese Datei wurde für die neue Struktur überarbeitet; ersetzen Sie sie komplett.
10

artisan aktualisieren

Ersetzen Sie auch die artisan-Datei vollständig.
11

tests/TestCase.php aktualisieren

Der Trait CreatesApplication wird nicht mehr benötigt. tests/CreatesApplication.php kann gelöscht werden.
12

.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.
13

Funktionscheck

Prüfen Sie das Ergebnis in dieser Reihenfolge.
Bei Problemen stellen Sie die gelöschten Dateien aus dem Backup wieder her und prüfen die Fehlermeldungen.

Projektstruktur nach der Migration

Die Struktur nach der Migration sieht so aus (Änderungen zur alten Struktur hervorgehoben):

Zusammenfassung

Zuletzt geändert am 13. Juli 2026