Vor etwas mehr als einem Monat wurde Laravel 8 veröffentlicht. Ich arbeite seit vielen Jahre mit Laravel und betreue und administriere auch einige Projekte seit vielen Versionen. Deshalb hatte ich jetzt Gelegenheit, die ersten Versionssprünge auf die neue Version durchzuführen. Hier ist, was bei Laravel 8 neu ist.
Upgrade von 7 auf 8
Wie immer, hilft der gute Upgrade Guide von Laravel 7, gut beim Update. Er zeigt nicht nur auf, wie das Update durchzuführen ist, sondern zeigt auch, welche Änderungen große Auswirkungen haben, und welche eher unwahrscheinlich Auswirkungen auf den eigenen Code haben. Neu ist die Minimumversion PHP 7.3. Das sollte kein Problem sein, zumal ältere PHP Versionen häufig gar nicht mehr angeboten werden, oder bereits nach und nach deaktiviert werden.
Wer lediglich die First-party Erweiterungen von Laravel nutzte, wie z.B. Passport oder Socialite, sollte von Anfang an keine Probleme haben. Geduldiger müssen die sein, die au Drittanbieter zurückgreifen. Hier infomiert man sich am besten auf den Github Seiten der jeweiligen Erweiterung.
Was ist neu bei Laravel 8?
Seit der Version 6 betreibt Laravel das sogenannte Semantic Versioning (semver genannt). Damit lässt sich einfach ablesen, welche Version derzeit genutzt wird. Anhand der Versionsnummer lassen sich ohne Probleme MAJOR, MINOR Changes und FIXES ablesen. Laravel beschreibt dabei den Release Zyklus ganz gut. Doch was genau ist neu an der neuen Major?
Laravel Jetstream für neue Projekte
Es gibt ein neues Start-Grundgerüst, welches nicht mit dem bisher üblichen Setup von Bootstrap oder Foundation und Vue oder React läuft. Jetstream läuft stattdessen mit dem (umstrittenen) Tailwind CSS und dem (ebenso umstrittenen) Livewire zusammen mit Inertia.
Mich persönlich freut dieses neue Grundgerüst. Doch bevor ich ein großes Projekt mit diesem Setup starte, muss ich glaub ich noch ein bisschen damit testen. Das schreit geradezu nach einem Hobbyprojekt.
Neues Standard Model Directory
Endlich sind bei Laravel auch per default die Models nicht mehr einfach im App Ordner angelegt, sondern bekommen ihren eigenen Models Ordner. Zugegeben: Man hätte das auch manuell umstellen können. Aber ich bleibe immer gerne bei der Standardkonfiguration, um nicht zusätzliche Probleme und Irritationen zu schaffen, wenn man was im argen liegt.
Migration Squashing
Eine praktische Funktion, falls die Web-Anwendung eine komplexe und stetig wachsende Datenbank hat. Das Migration Squashing legt alle Migrations zu einer SQL Datei zusammen, die dann aufgerufen wird. Danach folgen die Migrations, die nicht zum Squash gehören.
Time Testing Helpers
Wer Jobs testen will, die zu einer bestimmten Zeit getriggert werden, kann durch das Time Travelling die Zeit vor- und zurückdrehen und dadurch Aufgaben aus der Zukunft simulieren. So muss man nicht kurz vor dem Launch Aufgaben abermals umstellen. Eine Fehlerquelle weniger. Außerdem lässt sich die Bibliothek prima für Unit Testing anwenden. Die Syntax ist dabei denkbar einfach:
public function testBasicTest()
{
Travel::to('01-01-2009');
// Date is now 01-01-2009
// code goes here...
}
Oder eben seit Laravel 8.0 auch direkt eingebunden:
// Travel forward five minutes
$this->travel(5)->minutes;
$this->get($route)->assertSee('Created 5 mins ago');
Blade kann nun dynamisch genutzt werden
Blade kann nun auch in der Runtime eingesetzt werden und agiert dann dynamisch. Bisher war es nur möglich, Blade beim Rendern der View einzusetzen. Dieses Feature klingt super. Gleichzeitig kann ich mir den praktischen Gebrauch jetzt noch am wenigsten vorstellen. Definitiv ein Feature, dass ich bei der ersten Gelegenheit einsetzen werde, damit ich mir hier ein genaues Bild machen kann.
Das hier ist meine persönliche Zusammenfassung und Einordnung der Neuerungen. Wer einen besseren Überblick bekommen will, der ist an der Quelle natürlich besser aufgehoben. 🙂
Planen Sie ein neues Laravel 8 Projekt?
Lassen Sie uns darüber reden. Ich entwickle und betreue seit vielen Jahren Laravelprojekte und kann sie hier gerne beraten und unterstützen. Sie können mich gerne dazu kontaktieren.