Laravel 8 — Die neuen Features des PHP-Frameworks von der Laracon 2020

Montag, 07. September 2020 um 17:07 von Niclas Kahlmeier in Webentwicklung
Traditionell steht im September ein Major Release des PHP-Frameworks Laravel bevor. Am 8. September ist es soweit, dann geht Laravel in der 8. Version an den Start. Vorgestellt wurde Laravel 8 während des Laracon Summer 2020 am vergangenen Mittwoch (27. August 2020). Die Veranstaltung musste in diesem Jahr coronabedingt in einem Online-Format und nicht vor Ort stattfinden. Taylor Otwell, Initiator des Laravel-Projekts, stellte die wichtigsten Neuerungen vor. Niclas Kahlmeier, unser Autor und Kursentwickler der PHP- und Laravel-Class, fasst für uns die wichtigsten Punkte zur neuen Version von Laravel zusammen.
Laravel geht inzwischen in die 8. Runde, und ich muss sagen, dass mir die Richtung, die die Entwicklung des PHP-Frameworks einschlägt, sehr gut gefällt. Taylor Otwell, der Laravel vor einigen Jahren aus der Taufe hob, nutzte die Laracon zur Präsentation der Neuerungen, und aus den Reaktionen vor Ort — oder besser: online — lässt sich sagen, dass die Community über die Änderungen mehr als erfreut war. Da Laravel 8 auch direkt auf unseren PHP-Kurs Einfluss haben wird, gebe ich mit diesem Blogpost einen Überblick darüber, was uns ab dem 8. September im neuen Laravel und seinem Ökosystem erwartet.
Vor einigen Wochen konnte die Community via Twitter über den Speicherort der Models abstimmen. Als Folge dieser Abstimmung wandern diese mit Laravel 8 nun vom Ordner app/ in app/Models. Dieser Schritt ist in meinen Augen besonders sinnvoll, da in umfangreicheren Projekten ohnehin ein anderer Ordner gewählt wurde, um die Übersichtlichkeit zu bewahren.
Auch bei der Syntax des Routings hat sich in Laravel 8 etwas getan. Wenn du schon einmal mit Laravel gearbeitet hast, wird dir nachfolgendes Codebeispiel bekannt vorkommen:
Route::get('/user', 'UserController@index');
Die Syntax ändert sich jetzt ein wenig. Dieser Schritt wurde vor allem deshalb vollzogen, um Controller aus anderen Ordnern als dem Standardverzeichnis im Routing zu verwenden.
use App\Http\Controllers\UserController;
Route::get('user/', [UserController::class, 'index']);
Als Laravel Developer wirst du das Problem kennen, dass sich mit der Zeit immer mehr Migrations ansammeln, bis irgendwann dein migrations-Ordner hunderte Migrations umfasst und unübersichtlich wird. Um dem entgegenzuwirken, bietet Laravel 8 das so genannte Squashing. Mit dem Befehl php artisan schema:dump
werden alle vorhandenen Migrations in einer SQL-Datei zusammengequetscht. Die dabei herauskommende Schema-Datei wird im Ordner schema gespeichert. Besonders hilfreich ist, dass beim Migrieren erst das Schema ausgeführt wird und erst anschließend alle Migrations, die nicht Teil des oder der Schemas waren.
Factories haben sich im Vergleich zu vorherigen Laravel-Versionen besonders stark geändert: Sie sind in Laravel 8 klassenbasiert. Ein zur Factory gehöriges Model muss nun den Trait HasFactory verwenden. Für den Einsatz einer Factory verwendest du das Model mit der statischen Methode factory
. An diese können dann verschiedene Methoden oder Helper angehängt werden, die du unkompliziert selbst anhand deiner Bedürfnisse in die neue Factory-Klasse einfügen kannst.
User::factory→times(10)→create()
Das nachfolgende Problem kennt wahrscheinlich jeder: Du bist am Entwickeln und packst mittels php artisan down
den Maintenance Mode hinein. Jetzt kommt der Designer daher und möchte sich die Seite vorab anschauen. Was musst du tun? Korrekt, du fügst die IP-Adresse des Designers in der Allow List hinzu. Nun kommen aber noch Product Owner und Beta-Tester, die sich ebenfalls die Seite anschauen wollen. Der Spaß fängt richtig an, wenn der Beta-Tester viel reist und sich über irgendwelche Hotspots einloggen will, während der Product Owner immer ein VPN verwendet. Wie du dir denken kannst, ist das keine gute Idee.
Laravel 8 hat dafür aber eine Lösung parat, denn du kannst nun ein so genanntes Secret definieren.
php artisan down —secret="geheim"
Mittels dieses Secrets kann ein anderer ohne kompliziertes Whitelisting von IP-Adressen auf die Seite im Maintenance Mode zugreifen. Einfach das Secret an die App-URL hängen:
https://laraveldemoapp.dev/geheim
Übrigens kannst du mit der Flag —render
eine View angeben, die als Maintenance Page angezeigt wird. Es ist nun einfacher denn je.
Zeitreise ist mit Laravel 8 noch unkomplizierter möglich. Falls du jemals vor dem Problem standest, dass du testen möchtest, ob der Nutzer deine Applikation nach seiner Probemitgliedschaft nicht mehr weiter nutzen kann, ist Time Travel das richtige Feature für dich. Die Klasse, die diese Funktion hinzufügt, heißt Wormhole und vereinfacht Zeitreise mit Laravel 8 besonders stark:
$this→travelTo($user→trial_expiration);
$this→get($route)→assertSee("Trial expired");
//falls du einfach so in die Zukunft moechtest ;)
$this→travel(100)→year;
Nach diesen Ankündigungen waren alle happy und und ein Blick auf die Uhr verriet mir, dass Taylors Talk auf dem Laracon 2020 gleich vorbei sein würde. Es folgte allerdings etwas, das ich, als bekennender Apple-Fan, sonst nur von Apple-Keynotes kannte, nämlich ein One more thing. Während der gesamten Laracon verfolgten im Laravel Discord Online knapp 3000 Leute das Geschehen mit — und waren bei den folgenden Ankündigungen hellauf begeistert. Es fühlte sich ungefähr so an wie beim Release eines iPhones mit coolen neuen Features.
Aber was genau war es, was die Leute so aus dem Häuschen geraten ließ?
In der Laravel Community kommst du momentan nicht um den sogenannten TALL Stack herum. Hinter TALL verbirgt sich Tailwind CSS, Alpine , Laravel und Livewire (ich habe dir die Github-Seiten der vier Projekte verlinkt). Es gab schon häufig Diskussionen, dem Auth Scaffolding eine Option zum TALL Stack hinzuzufügen. Zurzeit kann zwischen Bootstrap, Vue und React gewählt werden.
Letztendlich dabei rausgekommen ist, dass das bisher bekannte Auth Scaffolding mit Laravel 8 komplett wegfällt und nur noch als "Legacy Package" verfügbar sein wird. Dafür erhalten wir zwei neue Packages, nämlich Laravel Jetstream und Laravel Fortify.
Das bedeutet für uns Entwickler: Laravel Jetstream ist das neue Application Scaffolding. Es bietet einen Login, Registrierung, Two Factor Authentication, API Support und Team Management. Es kann zwischen Livewire und Inertia JS gewählt werden. Die beiden Frameworks habe ich in einem früheren Blogpost bereits erwähnt.
Wir erhalten mit Livewire ein Feeling wie in einer Single Page Applikation, obwohl wir eine Applikation haben, die serverseitig gerendert wird. Wenn du mehr über Single Page Applications und Server Side Rendering erfahren möchtest, empfehle ich dir, die folgenden zwei Blogposts, die zwischen Pro und Contra abgewägen:
- Juan Vega: Client-side vs. server-side rendering: why it's not all black and white
- Alex Grigoryan: The Benefits of Server Side Rendering Over Client Side Rendering.
Wie auch das alte Auth Scaffolding vorher kann Jetstream vollständig an deine Bedürfnisse angepasst werden, du kannst aber über bereits eingebaute Models usw. verfügen, die du verwenden kannst. Das spart enorm Zeit.
Laravel Fortify ist dabei der unscheinbare Helfer im Hintergrund. Fortify ist das Backend für die Jetstream-Auth-Funktionen wie Login, Registrierung und Two Factor Auth.
Ich bin schon dabei, unseren Fernkurs »Moderne Webanwendungen mit PHP & MySQL« bezüglich des Laravel 8 Release anzupassen. Spätestens am 14. September wird es eine Aktualisierung mit allen neuen Features geben. Die hier genannten Neuerungen sind natürlich noch lange nicht alles, sondern primär die größten und am einfachsten umzusetzenden Änderungen. Wenn du Laravel 8 lernen möchtest oder dein Laravel-Wissen zur neuen Version auffrischen möchtest, empfehle ich dir unseren Laravel-Kurs. Übrigens, falls dich der TALL Stack interessiert, darfst du gespannt sein: Es ist inzwischen die dritte Laravel-Class in Arbeit ;)
Wenn du ganz neu bei Laravel dabei bist, lege ich dir folgende zwei Talks der Laracon besonders ans Herz ( selbstverständlich sind Talks auch für erfahrene Laravel Developer sehr spannend):
- Im Talk Bad is Good beleuchtet Jeffrey Way den Wandel der Konventionen, denn die Art und Weise, wie wir idealen Code schreiben, hat sich in den letzten Jahren stark verändert. Code den wir 2010 für gut befand, würden wir heute so nicht mehr schreiben.
- Im Talk Refactoring to Simplicity zeigt Marcel Pociot eindrucksvoll, warum es wesentlich besser ist, simplen Code einzusetzen. Einfach ist es nicht, simplen Code zu schreiben, aber auf jeden Fall wert es zu versuchen: Er ist expressiv, lesbar, verständlich, selbsterklärend — und irgendwie auch beruhigend. Marcel Pociot liefert dabei einige Tipps, wie du deinen Code simpler halten kannst.
Die Aufzeichnung der Talks der Laracon Summer 2020 findest du auf laracon.net. Zurzeit benötigst du ein Ticket (die 29$ sind die Talks auf jeden Fall wert), die Talks erscheinen in ungefähr zwei Monaten kostenfrei auf Youtube. Ich werde den Blogpost aktualisieren, sobald die Videos auf Youtube online verfügbar sind. ;)
Bildquelle:
Laravel Schriftzug: ©Shutterstock — Prabowo96
Laravel Jetstream: © The MIT License (MIT) — Taylor Otwell
Laravel Fortify: © The MIT License (MIT) — Taylor Otwell