Welche Änderungen erwarten uns mit Laravel 5.3?

4. August 2016 von Dirk Helbert
Laravel 5.3 Änderungen

Laravel 5.3 kommt mit großen Schritten. Neue Releases bringen auch immer Änderungen mit sich. Manche werden schon mit Spannung erwartet und einige bringen dich als Entwickler zum schwitzen, weil mit ihnen Umbauten in deiner Anwendung notwendig sind. Ich bin immer wieder begeistert wie einfach die Entwicklung mit Laravel ist. Trotzdem sind Updates auch hier nicht immer so einfach zu machen.

Dieser Artikel bringt dir die Änderungen in Laravel 5.3 näher. Wenn du bisher noch nichts mit Laravel gemacht hast, dann empfehle ich dir Laravel Anfänger Tutorial für den einfachen Einstieg.

Neue Welcome View

Die welcome.blade.php View wurde etwas angepasst. Statt dem sonst typischen Laravel 5 erscheint der Schriftzug „Laravel“ und einige Links zur Dokumentation, News, Laracast, Forge und dem Laravel Projekt auf Github.

Alte Laravel 5 Welcome View

Laravel 5 View Alt

Neue Laravel 5.3 Welcome View

Laravel 5.3 View Neu

Routing

In Laravel 5.3 befindet sich die Routing Konfiguration nicht mehr versteckt in /app/Http/routes.php sondern in dem Verzeichnis /routes. Dort befinden sich aktuell die web.php und die api.php. Diese Dateien werden über den RouteServiceProvider geladen. Dieser befindet sich in /app/Providers/RouteServiceProvider.php.

Konkret wird hier die Methode run() aufgerufen. Die wiederum ruft mapWebRoutes() und mapApiRoutes() auf. Dort werden die Routen dann per Route::group definiert. Hier können natürlich auch eigene Implementationen eingebracht werden.

Der Vorteil ist, dass die Routen für web und api getrennt sind und nichts miteinander zu tun haben. Schließlich braucht ein Api Request in der Regel keine Cookies oder Session Informationen.

Kahlschlag im app Verzeichnis

In Laravel 5.2 gab es noch einige Verzeichnisse die auf dem ersten Blick kaum Sinn machten. Da war zunächst einmal der /app/Events Ordner mit der Datei Event.php. Hierbei handelte es sich um eine leere abstrakte Klasse. Gleiches galt für /app/Jobs/Job.php.

Noch auffälliger war es allerdings in /app/Listeners und /app/Policies. Dort gab es jeweils nur eine .gitkeep, die keine andere Funktion hatte außer das man ein „leeres“ Verzeichnis in Git erstellen konnte.

Dieser Ballast ist jetzt aus Laravel 5.3 entfernt. Erst wenn ich mit php artisan make:event PostGetsLive ein neues Event anlege, wird das Verzeichnis und die PostGetsLive.php mit der dazugehörigen Klasse erstellt. Gleiches gilt für Listener und Policies. Das ergibt tatsächlich mehr Sinn.

Der Database Query Builder gibt jetzt eine Collection zurück

Ich gebe es zu. Den Query Builder in Laravel habe ich persönlich immer sehr stiefmütterlich behandelt. Ich nutze sehr viel Eloquent. Und das fand ich bisher auch immer sehr gut.

Mit Laravel 5.3 erhält der Query Builder ein neues Feature. Und zwar kommt jetzt statt eines Array eine Illuminate\Support\Collection zurück.

Doch was ist daran so besonders?

Der folgende Befehl funktioniert unter Laravel 5.2 nicht:

DB::table('users')->get()->first();

Und zwar weil dort der Query Builder noch ein Array zurück gibt. Damit kann ich nicht so viel machen. Doch mit Laravel 5.3 ist das möglich.

Um weiterhin das Ergebnis als Array zu bekommen ist es notwendig die bisherigen Abfragen anzupassen:

DB::table('users')->get()->all();

Gibt das Ergebnis dann wieder als Array zurück.

Der Cache Helper

In /vendor/laravel/framework/src/Illuminate/Foundation/helpers.php gibt es die neue Methode cache(). Erstmal nichts aufregendes. Aber die Methode ist sehr einfach gehalten und kann direkt genutzt werden.

Beispiel:

Damit werden die Einstellungen für 60 Minuten im Cache gespeichert.

Um die Einstellungen wieder aus dem Cache zu holen:

Einfacher geht es kaum noch.

Javascript Assets / Vue Integration

Mit Laravel 5.3 ist die Integration von Vue.js noch einfacher geworden. Bisher gab es unter /resources/assets nur einen css Ordner. Mit Laravel 5.3 gibt es dort noch einen js Ordner mit einigen Javascript Dateien.

Hinzugekommen ist auch der Aufruf .webpack('app.js') im gulpfile.js. Schön ist auch die neue Zusammenfassung nach einem gulp Befehl. Vielleicht gab es das auch schon vorher und konnte mit irgendeiner Einstellung aktiviert werden. Für mich ist diese jetzt neu.

Gulp Zusammenfassung

Gulp Zusammenfassung

Unter /resources/assets/js/components ist bereit eine Example.vue vorhanden. Das ist eine Beispiel Komponente. Um diese mal anzeigen zu lassen, fügst du einfach in die /resources/views/welcome.blade.php folgendes in den head Bereich ein:

Der body Bereich und das Ende der Datei sieht dann so aus:

Wenn du jetzt die Seite erneut aufrufst, sollte die Komponente ausgegeben werden. Das macht Spaß.

Einfache Paginator Anpassung

Ergebnisse mit Laravel zu paginieren war schon immer sehr einfach. Mit {{ $users->links() }} kann der Paginator ausgegeben wenn vorher die $users Variable mit App\User::paginate(5) befüllt und an die View übergeben wurde.

Doch das Aussehen des Paginators konnte nicht so einfach angepasst werden.

Das ist mit Laravel 5.3 auch anders.

Mit php artisan vendor:publish werden neue Views in /resources/views/vendor/pagination angelegt. Wenn du mal die /resources/views/vendor/pagination/default.blade.php öffnest, siehst du die aktuelle Paginator View. Diese kannst du jetzt nach Belieben anpassen. Zum Beispiel um die Vor und Zurück Symbole auszutauschen. Oder was auch immer du anpassen willst.

Wenn du mehrere unterschiedliche Paginatoren benötigst, kannst du an die Methode links() auch einen Parameter übergeben. {{ $users->links('pagination::simple-default') }} zum Beispiel zeigt einen sehr einfachen Paginator.

Verbesserte Mail Implementierung

Mit Laravel 5.2 kommt eine neue Klasse ins Spiel, die sich um die Generierung von E-Mail kümmert. Die Mailable Klasse.

Zuerst muss ich eine neue Mail Klasse anlegen. Die geschieht mit php artisan make:mail UserRegistration. Die Datei UserRegistration.php wird in /app/Mail automatisch erstellt.

Die Klasse hat einen Konstruktor und eine build() Methode. In der build() Methode wird die dazugehörige View aufgerufen. Der Name der View muss dann hier angepasst werden.

Die Mail wird dann mit Mail::to('info@dirk-helbert.de')->send(new UserRegistration); verschickt.

Dem Konstruktor der Mail Klasse können dann die notwendigen Daten bzw. Objekte übergeben werden:

Mail::to('info@dirk-helbert.de')->send(new UserRegistration($user));

Blade Foreach Loop Objekt

Aktuell überlege ich noch wofür ich das neue $loop Objekt in Laravel 5.3 nutzen kann und sollte. So ganz schlüssig bin ich mir da noch nicht.

Aber was enthält das neue $loop Objekt?

Mit $loop->index erhalte ich den aktuellen index key, mit $loop->remaining erhalte ich die Anzahl der noch verbleibenden Elemente, mit $loop->count bekomme ich die gesamte Anzahl der Elemente, $loop->first gibt den Boolean true/false zurück und sagt aus ob es das erste Element in der Liste ist. Gleiches gilt für $loop->last. Nur das es sich dabei um die Abfrage handelt ob es das letzte Element ist. $loop->depth gibt bei Multidimensionalen Elementen die aktuelle Tiefe zurück. So können auch @foreach verschachtelt werden. Auf das Eltern Element kann dann mit $loop->parent zugegriffen werden.

Aktuell habe ich dafür leider keinen konkreten Anwendungsfall. Jeff Way hat auf Laracasts einen Anwendungsfall konstruiert indem er damit eine CSS Klasse dem ersten oder letzten Element hinzugefügt hat. Er selbst hat aber darauf hingewiesen, dass man das doch besser direkt mit CSS Anweisungen macht.

Falls euch ein Anwendungsfall einfällt, dann hinterlasst einfach einen Kommentar.

Laravel Entwickler Version installieren

Mit composer create-project laravel/laravel laravel-dev dev-develop bekommst du die aktuelle Entwickler Version von Laravel. Wichtig ist das „dev-develop“ am Ende.

Fazit zu Laravel 5.3

Es bleibt spannend und Laravel entwickelt sich nicht einfach nur weiter, sondern der Fokus bleibt auf dem Wichtigsten. Die einfache Entwicklung und der Spaß der Entwickler.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.