Laravel 5 – Alle Neuerungen im Überblick

Das neue Jahr hat gerade erst begonnen und schon geht es auch in der Welt des Webs voran. Besonders freue ich mich über den Release vom PHP Framework Laravel 5. Lange hat es gedauert und es wurde viel spekuliert. Jetzt ist es aber da und alles was ihr darüber wissen müsst ist hier in diesem Artikel zusammengefasst.

Laravel 5

Dateistruktur

Einer der Gründe warum Laravel 4.3 jetzt doch zu Laravel 5 wurde ist die Veränderung der Datei Struktur. Früher war quasi die komplette Applikation in dem Ordner app/ zu finden. Dieser Ordner wurde jetzt mächtig aufgeräumt und beinhaltet nur noch die Logik der Applikation selbst. Configs und datenbank-relevante Daten wurden ins Hauptverzeichnis darüber verschoben.

Der Models Ordner wurde komplett entfernt. Dies haben viele Entwickler schon länger so gemacht und die Models direkt in den entsprechenden Bereich der Business-Logik verschoben. Es spricht aber natürlich auch nichts dagegen einen Models Ordner wieder zu erstellen.

Auch Views und Sprachdateien haben einen neuen Platz im Hauptverzeichnis unter “resources” bekommen. Hier ist jetzt auch Platz für andere Assets.

Insgesamt ist die Dateistruktur mit Laravel 5 aufgeräumter, flexibler und auch bereit für große Projekte.

Laravel 5 Dateistruktur

Blade

In Laravel gab es für Blade doppelte und dreifache geschwungene Klammer für einen Raw-Output und einen gesäuberten Output. ( {{…}} oder {{{…}}} )
Ab jetzt liefern beide Funktionen letzteres und der Raw-Output wird mit Rufzeichen in der Syntax verwendet.

 

    {!! Form::open() !!}

Namespacing

Passend zur neuen Dateistruktur verwendet  Laravel 5 jetzt namespaces out of the box. Hier wird PSR-4 autoloading eingesetzt um den namespace “App” auf den Ordner “app/“ zu verweisen. Dieser top-level Namespace kann jedoch leicht mit einem Artisan Command überall gleichzeitig geändert werden.

 

php artisan app:name Acme

 

Form Requests

Form Requests ist ein neues Feature in Laravel 5 mit dem Form-Validation und Authorization einen eigenen Platz bekommen haben. Dadurch  müssen Models und Controllers nicht mehr mit dieser Logik belagert werden. Es gehört zu meinen Lieblingsneuerungen und deswegen werde ich hier auch etwas ins Detail gehen. Ein Artisan Befehl erstellt die nötige Klasse.

 

    php artisan make:request StorePostRequest

 

Die Request-Klasse wird im Requests Ordner erstellt und beinhaltet mindestens das “rules”-Array und eine „authorize()” Methode. Die Rules dienen der Validierung und die erwähnte Methode prüft ob der Nutzer hier überhaupt richtig ist.

 

....

    class StorePostRequest extends FormRequest {

        public function rules() {
            return [
                'title' => 'required',
                'message' => 'required'
            ];
        }

        public function authorize() {
             // Only allow logged in users
             return \Auth::check();
       }

    }

 

Um ein Request Objekt zu verwenden, wird es direkt in die gewünschte Controller Methode injiziert. Bevor der Inhalt der Methode aufgerufen wird, findet nun das Validieren statt. Natürlich nur, wenn die “authorize()” Methode TRUE zurückgibt.

 

    // Inject the request class to the controller method
    public function storePost(StorePostRequest $request) {
        ...
    }

 

Natürlich ist ein simples Validieren wie bisher immer noch möglich und Form Request bleiben optional.
Link zur Doku

 

Method injection

Üblicherweise werden Abhängigkeiten in Laravel über den Konstruktor geladen. Dadurch waren diese in der gesamten Klasse erreichbar. Jetzt ist das aber auch direkt in einer Methode möglich.

Link zur Doku

Commands & Events

Command ist ein beleibtes Design Pattern bei dem, grob gesagt, Komponenten von einander entkoppelt werden. Das hat den Vorteil dass diese Komponenten besser wiederverwendet und getestet werden können. Dieses Prinzip gab es auch schon in Laravel 4, doch jetzt gibt es einen neues Artisan Shortcut der die Arbeit mit Commands sehr erleichtert.

Dadurch wird gleich eine Klasse für den Handler und eine für den Command erstellt. Events funktionieren jetzt auch sehr ähnlich und es gibt natürlich auch hier einen neuen Artisan Shortcut:

    php artisan make:event ThingWasDone

 

Link zum Laracast Video Tutorial

Routes

Routes haben jetzt einen eigenen Cache. Der hilft besonders wenn man in seiner Applikation sehr, sehr viele Routes definiert hat und kann einige hundert Millisekunden Zeitersparnis bringen. Funktionieren tut das ganze wieder über Artisan.

 

    php artisan route:cache

 

Achtung: nach dem ersten Aufruf muss die Funktion nach jeder weiteren Änderung der Routes aufgerufen werden.

Link zur Doku

Flysystem

Dieses Package könnte euch schon ein Begriff sein. Es ist quasi das standard PHP Package für die Einbindung von lokalen oder Remote-Dateisystemen. Es ist in Laravel jetzt direkt, mit einer eigenen Abstraktion, integriert.

Link zur Doku

Environment

Environment Detection in L4 war etwas holprig und wurde deshalb komplett überarbeitet. Hier wird nun auf das PHP Package dotenv gesetzt. Im Projekt Root kann man  .env Dateien erstellen. Diese beinhalten z.B. die DB Zugangsdaten für die lokale Entwicklung. In der DB-Config wir dann über eine Funktion die richtigen Daten geladen.

 

    return array(
        ...
        'database' => env('DB_DATABASE’, 'myproddb'),
        ...
    );

 

Die Funktion env() sucht, je nach derzeitiger Umgebung, den Wert von “DB_DATABASE” in der entsprechenden „.env” Datei. Für die Live-Datenbank oder für Testing können eigene .env Dateien angelegt werden.

Link zur Doku

Middleware

Obwohl Middlewares in Laravel seit 4.1 intern verwendet werden, taucht der Begriff für den Benutzer erst jetzt auf. Wenn ein HTTP Request eure App erreicht, muss er zuerst durch verschiede Ebenen durch, bevor er euren Code erreicht. (Route / Controller) Zu diesen Ebenen gehört Session / Cookie Check, CSRF Schutz oder Authentication. Neben den Middlewares die intern verwendet werden, können jetzt auch eigene erstellt werden. Diese ersetzen z.B. die bisherigen Filter.

 

    artisan make:middleware MiddlewareName

 

Dieser Befehl erstellt die gewünschte Middleware Klasse im neuen Middleware Ordner.
Link zur Doku

Laravel Scheduler

Wer viel mit Cronjobs arbeitet, wird sich über den neuen Scheduler freuen. Nötig dafür ist nur ein erster Cronjob der „artisan schedule:run” jede Minute aufruft. Die einfach Syntax hilft dann bei der Erstellung von weiteren Cronjobs.

 

    // Example cronjob
    $schedule->command('cache:clear')
        ->hourly()
        ->sendOutputTo($filePath)
        ->emailOutputTo('me@domain.com');

 

Socialite

Wer findet die OAuth Implementierung noch so schrecklich? Socialite ist ein optionales Laravel Package, das genau das vereinfachen soll. Derzeit werden Facebook, Twitter, Google und GitHub unterstützt.
Link zur Doku

Elixir

Mit Elixir gibt es jetzt in Laravel 5 einen Wrapper für den JavaScript Task-Manger Gulp. Dadurch lassen sich Assets wie Styles oder Scripts einfach verarbeiten. (Sass, less, CoffeScript…) Da die Meisten diese Tasks sowieso schon täglich verwenden, macht es auch Sinn diese jetzt in Laravel zu unterstützen. Natürlich wieder optional

 

    elixir(function(mix) {
        mix.scripts([
            "jquery.js",
            "app.js"
        ]);
    });

 

Link zur Doku

Upgrade

Leider ist es mit einem “composer update” hier nicht getan. Es handelt sich um einen Major Release und es hat sich doch einiges getan. Empfohlen wird mit einer neuen leeren L5 Applikation zu beginnen und dann die bestehende App darin zu integrieren.  Man sollte sich auf jeden Fall etwas Zeit dafür nehmen und die Dokumentation hilft natürlich dabei. Das Upgrade zahlt sich aber auf jeden Fall aus.

Link zur Doku

Video Tutorials

Auf Laracasts, der Plattform für Laravel und PHP Video Tutorials , gibt es eine komplette Serie über Laravel 5. Diese ist gratis und kann ich jedem nur ans Herz legen.

Über den Autor

Christoph Rumpel

Meine Rolle bei Liechtenecker:
Meister des Backends, Erforscher zukünftiger Technologien und Trends, liebt Communities und strebt danach, das Web für alle zu verbessern.

Wenn es weder IT noch Digitalisierung gäbe, wäre mein Beruf:
Barkeeper oder Surf-Lehrer in Portugal oder Bali (wo die Sonne den ganzen Tag scheint und die Natur noch das Leben bestimmt)

Mein Herz schlägt für:
Das Web, PHP, Pi, virtuelle Sonntags Spaziergänge durch Uncharted, Sport, auf cleanen Wellen in Ericeira surfen.

Du hast etwas zum Artikel zu sagen? Schreibe es nieder

Schreibe einen Kommentar

Kommentare