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.
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.
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"
]);
});
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.
Du willst mit jemanden über das Thema plaudern?
Einen kostenlosen Termin mit CEO Susanne vereinbaren!AI-Driven UX - Möglichkeiten, Design-Prinzipien und Pflichten für UX-Designer - 2024 Update
UPDATE 2024: Ausgegraben aus 2019 dieses schmucke Fundstück über AI und UX. Irgendwie drehen sich die Trend-Themen doch alle Jahre im Kreis und man könnte glauben man findet sich diesbezüglich als Bill Murray in "Täglich grüßt das Murmeltier [...]
Jetzt lesenFolge #62 mit Susanne Liechtenecker
In Folge 62 besinnt sich Susanne auf die Anfänge dieses Podcasts und begrüßt keinen Gast, sondern erzählt über das Buch "Jäger, Hirten, Kritiker" von Richard David Precht und warum es sie inspiriert hat.
Jetzt anhören