Ihre Anwendung läuft seit Jahren auf Laravel 5. Sie verdient Geld, die Fachlogik stimmt, niemand beschwert sich – bis ein Composer-Update wegen einer veralteten Abhängigkeit scheitert oder ein Security-Advisory eine PHP-Version betrifft, die Sie längst hätten ablösen müssen. Die Frage ist selten, ob Sie modernisieren, sondern wie Sie ein Laravel 5 auf 10 Upgrade durchziehen, ohne das funktionierende System zu zerlegen.
Die gute Nachricht vorweg: Der Sprung ist groß, aber er ist ein bekannter, dokumentierter Pfad. Und das Wertvollste an Ihrer Anwendung – die über Jahre gewachsene Geschäftslogik – ist fast nie das Problem. Das Problem ist der Code drumherum: Framework-Aufrufe, die sich geändert haben, Helper, die verschwunden sind, und PHP-Versionen, die niemand mitgezogen hat.
Warum das Laravel 5 auf 10 Upgrade kein einzelner Sprung ist
Sie können nicht direkt von Laravel 5 auf 10 springen. Laravel-Upgrades sind für jeweils eine Major-Version ausgelegt. Der Weg führt über 5.8, dann 6, 7, 8, 9 und schließlich 10. Jede Stufe hat einen eigenen offiziellen Upgrade-Guide, und jede erwartet, dass die vorherige sauber abgeschlossen ist.
Ein wichtiges Detail zur Versionsnummer: Nach Laravel 5.8 kam nicht Laravel 6.0 als "kleiner" Schritt, sondern der Wechsel zu Semantic Versioning. Aus dem, was früher 5.9 geheißen hätte, wurde Laravel 6.0 (eine LTS-Version). Die "5." verschwand also als Präfix – inhaltlich ist der Sprung von 5.8 auf 6 überschaubar, die Nummer täuscht.
Der wahre Gatekeeper: die PHP-Version
Welche PHP-Version braucht Laravel 10? Laravel 10 setzt mindestens PHP 8.1 voraus. Viele Laravel-5-Anwendungen laufen aber noch auf PHP 7.1 oder 7.2. Das ist in der Praxis die größte Hürde des gesamten Upgrades.
Der PHP-Versionssprung zwingt Sie zu Anpassungen, die mit Laravel selbst gar nichts zu tun haben. Zwischen PHP 7.1 und 8.1 liegen mehrere Breaking Changes der Sprache: strengere Typen, Änderungen an Nullwert-Behandlung, entfernte Funktionen und das strikte Verhalten bei fehlenden Array-Schlüsseln. Rechnen Sie damit, dass ein Teil der Arbeit im PHP-Code Ihrer Anwendung steckt, nicht in Framework-Aufrufen.
Praktisch heißt das: Stabilisieren Sie zuerst PHP. Bringen Sie die Anwendung auf PHP 8.1 lauffähig, solange sie noch auf Laravel 5.8/6 läuft, und ziehen Sie erst danach die Framework-Versionen hoch. So trennen Sie zwei Fehlerquellen sauber voneinander.
Die typischen Bruchstellen zwischen Laravel 5 und 10
Über die Versionen hinweg tauchen immer dieselben Themen auf. Das sind die Stellen, an denen es in der Praxis knirscht:
- Globale String- und Array-Helper: Funktionen wie
str_slug()oderarray_get()wurden ausgelagert und später entfernt. Ersatz sind die FassadenStr::slug()undArr::get(). Bei einer großen Codebasis sind das viele, aber mechanische Änderungen. - Formular- und HTML-Helper: Das
Form::- undHtml::-Paket (LaravelCollective) war nie Kern von Laravel und muss separat eingebunden oder ersetzt werden. - Factories: Ab Laravel 8 sind Model-Factories klassenbasiert und nutzen den Trait
HasFactory. Alte closure-basierte Factories laufen nicht mehr unverändert. - Seeder und Factory-Namespaces: Diese liegen jetzt unter
Database\Seedersbzw.Database\Factories. Fehlende Namespaces führen zu "class not found"-Fehlern. - Model-Datumsfelder: Die Property
$datesgilt als veraltet; Datumsfelder gehören in$castsmitdatetime. - Mailer: Laravel 9 wechselte intern von SwiftMailer auf
symfony/mailer. Wer Mail-Interna direkt angefasst hat, muss hier anpassen. - Symfony-Unterbau: Laravel 9 hob die Symfony-Komponenten auf Version 6. Eigene Abhängigkeiten, die noch ältere Symfony-Pakete verlangen, blockieren dann das Composer-Update.
Wie Sie das Upgrade konkret angehen
Wie geht man ein Laravel-Upgrade Schritt für Schritt an? Version für Version, jeweils mit grüner Testsuite, unter Versionskontrolle und mit dem offiziellen Upgrade-Guide der jeweiligen Zielversion daneben.
- Sicherheitsnetz bauen: Ohne aussagekräftige Tests ist ein Upgrade Blindflug. Wenn Feature-Tests fehlen, schreiben Sie zuerst welche für die kritischen Fachprozesse. Das ist keine verschwendete Zeit – es ist die Absicherung Ihrer Investition.
- Abhängigkeiten kartieren: Prüfen Sie mit
composer why, welche Pakete an einer Version hängen. Verlassene Pakete sind oft der eigentliche Blocker und müssen ersetzt werden. - PHP zuerst: Auf PHP 8.1 heben, solange Sie noch auf einer alten Laravel-Version sind.
- Eine Version pro Schritt: 5.8 → 6 → 7 → 8 → 9 → 10. Nach jedem Schritt Tests laufen lassen und committen. Werkzeuge wie Laravel Shift können die mechanischen Änderungen beschleunigen, ersetzen aber nicht das Verständnis.
- Config und Dependencies vergleichen: Neue Config-Optionen und geänderte Standardwerte übernehmen Sie am besten durch Abgleich mit einer frischen Installation der Zielversion.
Arbeiten Sie in einem Branch, halten Sie die alte Version produktiv, und schalten Sie erst um, wenn die neue Version in einer staging-Umgebung durchläuft.
Warum Neuentwicklung meist die teuerste Option ist
Bei so einer Liste an Änderungen liegt der Gedanke nahe, alles neu zu bauen. In den allermeisten Fällen ist das die riskanteste und teuerste Entscheidung. Ein System, das seit Jahren läuft, enthält unzählige Sonderfälle, Regeln und Ausnahmen, die niemand dokumentiert hat – sie stecken im Code. Eine Neuentwicklung müsste dieses Wissen erst wieder mühsam rekonstruieren und produziert dabei zwangsläufig neue Fehler in Logik, die vorher nachweislich funktioniert hat.
Ein Upgrade dagegen erhält genau diese bewährte Fachlogik und tauscht nur den technischen Unterbau aus. Sie modernisieren das Fundament, ohne das Haus abzureißen.
Ehrlicher Praxis-Tipp
Machen Sie nicht alles auf einmal. Der häufigste Fehler ist, PHP-Upgrade, Framework-Sprünge und Refactoring in einen einzigen riesigen Branch zu werfen. Wenn dann etwas bricht, wissen Sie nicht, welche der drei Baustellen schuld ist. Kleine, nachvollziehbare Schritte mit grüner Testsuite sind langsamer im Gefühl, aber deutlich schneller im Ergebnis – und sie halten Ihr System jederzeit auslieferbar.
Wenn Sie bei genau so einem Upgrade einen Sparringspartner brauchen, der Legacy-Laravel-Anwendungen modernisiert statt sie neu zu schreiben, dabei unterstützt LegacyWerk.