Einleitung
Laravel 12 wurde im Februar 2025 veröffentlicht. Dieser Leitfaden beschreibt die Upgrade-Schritte von Laravel 11.x auf 12.x.Der geschätzte Zeitaufwand liegt bei etwa 5 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 des Laravel-Installers
Auswirkung: Mittel
- Eloquent-Trait
HasUuidsund UUIDv7
Auswirkung: Niedrig
- Carbon 3
- Index-Mapping der Ergebnisse in Concurrency
- Klassenabhängigkeits-Auflösung im Container
- SVG-Ausschluss bei der Image-Validierung
- Default-Root-Pfad des lokalen Filesystem-Disks
- Datenbank-Inspektion über mehrere Schemata
- Merge verschachtelter Array-Requests
Upgrade-Schritte
Abhängigkeiten aktualisieren
Auswirkung: Hoch Aktualisieren Sie incomposer.json folgende Abhängigkeiten.
Laravel-Installer aktualisieren
Auswirkung: Hoch Wenn Sie neue Laravel-Anwendungen mit dem Laravel-Installer-CLI erstellen, aktualisieren Sie diesen auf eine Version, die Laravel 12.x und die neuen Starterkits unterstützt. Wenn percomposer global require installiert:
php.new verwenden Sie den passenden Reinstallationsbefehl für Ihr Betriebssystem.
- macOS
- Windows PowerShell
- Linux
Neue Starterkits
In Laravel 12 wurden neue Starterkits eingeführt, die die bisherigen Breeze und Jetstream ablösen. Beim Ausführen vonlaravel new wählen Sie den Frontend-Stack interaktiv aus.
Verfügbare Starterkits:
- React – Inertia 2, React 19, TypeScript, Tailwind 4, shadcn/ui
- Vue – Inertia 2, Vue Composition API, TypeScript, Tailwind 4, shadcn-vue
- Svelte – Inertia 2, Svelte 5, TypeScript, Tailwind 4, shadcn-svelte
- Livewire – Livewire, Tailwind 4, Flux UI
Beim Upgrade bestehender Anwendungen muss ein Starterkit nicht neu eingeführt werden. Die Neuerungen gelten für neue Projekte.
Breaking Changes
Eloquent
Trait HasUuids und UUIDv7
Auswirkung: Mittel
Das Trait HasUuids liefert nun UUID v7 (geordnete UUIDs). Möchten Sie das bisherige Verhalten mit geordneten UUID v4 beibehalten, wechseln Sie auf das Trait HasVersion4Uuids.
HasVersion7Uuids verwendet haben, wechseln Sie auf HasUuids (Verhalten ist nun identisch).
Validierung
SVG-Ausschluss bei der Image-Validierung
Auswirkung: Niedrig Die Ruleimage erlaubt standardmäßig keine SVGs mehr. Wenn Sie SVGs erlauben möchten, geben Sie das explizit an.
Storage
Default-Root-Pfad des lokalen Filesystem-Disks
Auswirkung: Niedrig Wenn Sie infilesystems keinen local-Disk explizit definiert haben, wurde der Default-Root von storage/app auf storage/app/private geändert.
Um das bisherige Verhalten beizubehalten, definieren Sie den local-Disk explizit.
Datenbank
Datenbank-Inspektion über mehrere Schemata
Auswirkung: NiedrigSchema::getTables(), Schema::getViews() und Schema::getTypes() geben standardmäßig Ergebnisse aus allen Schemata zurück. Zur Einschränkung auf ein Schema übergeben Sie das Argument schema.
Schema::getTableListing() liefert standardmäßig schema-qualifizierte Tabellennamen.
Änderungen an Datenbank-Konstruktorsignaturen
Auswirkung: Sehr niedrig Die Konstruktoren vonIlluminate\Database\Schema\Blueprint und Illuminate\Database\Grammar erwarten nun als erstes Argument eine Connection-Instanz.
| API | Status |
|---|---|
Blueprint::getPrefix() | deprecated |
Connection::withTablePrefix() | entfernt |
Grammar::getTablePrefix() / setTablePrefix() | deprecated |
Grammar::setConnection() | entfernt |
Concurrency
Index-Mapping der Ergebnisse
Auswirkung: Niedrig Wenn SieConcurrency::run() ein assoziatives Array übergeben, werden die Ergebnisse jetzt den jeweiligen Keys zugeordnet zurückgegeben.
Container
Default-Werte bei der Auflösung von Klassenabhängigkeiten
Auswirkung: Niedrig Der DI-Container berücksichtigt beim Auflösen von Klassen-Instanzen die Default-Werte von Klassen-Properties.Requests
Merge verschachtelter Array-Requests
Auswirkung: Niedrig$request->mergeIfMissing() unterstützt jetzt das Mergen verschachtelter Array-Daten in Dot-Notation. Bisher wurden Dot-Notation-Keys als Top-Level-Keys angelegt.
Routing
Priorität von Routen
Auswirkung: Niedrig Bei mehreren Routen mit gleichem Namen wurde das Verhalten mit und ohne Cache vereinheitlicht. Auch ohne Route-Cache hat nun die zuerst registrierte Route Vorrang, nicht die zuletzt registrierte.Authentifizierung
Änderung des DatabaseTokenRepository-Konstruktors
Auswirkung: Sehr niedrig
Der Konstruktor von Illuminate\Auth\Passwords\DatabaseTokenRepository erwartet den Parameter $expires nun in Sekunden, nicht mehr in Minuten.
Carbon 3
Auswirkung: Niedrig Der Support für Carbon 2.x wurde entfernt. Laravel-12-Anwendungen benötigen Carbon 3.x.Fazit
Laravel 12 lässt sich vergleichsweise reibungslos aktualisieren. Zusammenfassung der wichtigsten Punkte:| Änderung | Auswirkung | Maßnahme |
|---|---|---|
Abhängigkeiten in composer.json aktualisieren | Hoch | Auf laravel/framework ^12.0 heben |
| Laravel-Installer aktualisieren | Hoch | composer global update |
HasUuids → UUIDv7 | Mittel | Bei Bedarf auf HasVersion4Uuids wechseln |
SVG-Ausschluss bei image-Validierung | Niedrig | allow_svg ergänzen, wenn SVGs erlaubt sein sollen |
| Änderung des Default-Root-Pfads für lokalen Disk | Niedrig | Konfiguration explizit angeben |
| Carbon 3 erforderlich | Niedrig | API-Kompatibilität prüfen |
Referenzen
- Offizieller Upgrade-Guide (Englisch)
- Diff im Repository laravel/laravel (11.x → 12.x)
- Neue Starterkits
- Laravel Shift – Community-Dienst zur Upgrade-Automatisierung
- Carbon-3-Migration-Guide