HTTP-Verarbeitung

Front-Controller

Bild: HTTP-Request durch Front-Controller !

Der Front-Controller lädt Composer’s Autoloading, sowie das Illuminate (Laravel) PHP-Framework und ist für das Bootstraping des Basissystems, sowie der Verarbeitung von HTTP-Anfragen verantwortlich.

Eine MVC-Applikation besitzt immer einen zentralen Einstiegspunkt, den Front-Controller, welcher auch gern Bootstrap-File genannt wird. Der Front-Controller, ist im Endeffekt nur dafür zuständig die Anfragen entgegenzunehmen und diese mithilfe des HTTP-Kernels zu beantworten. Im Hintergrund wird hierzu zuerst das Composer Autoloading, sowie das Illuminate (Laravel) PHP-Framework geladen. Anschliessend wird mithilfe des Bootstraping das Basissystem hochgefahren. Nun kann die Anfrage mithilfe des HTTP-Kernels verarbeitet und beantwortet werden.

Das erweckt eventuell den Anschein das vieles einfach so, oder mithilfe von Magie entsteht. Naja das ist so nicht Ganz richtig, denoch ist es Momentan noch etwas zu früh um Dir diesen Schritt detailiert zu erklären. Aber wir veratten schon einmal, dass bspw. der Service-Provider eingesetzt wird um alle Klassen sowie das Basissystem selbst in die Anwendung zu laden.

HTTP / Console Kernels

Nachdem der Front-Controller geprüft hat um welche Art von Anfrage es sich handelt, wird die Anfrage an den HTTP- oder Console-Kernel weitergeleitet, welcher die Anfrage schlussendlich verarbeitet. Alle Anfragen passieren den einen oder anderen Kernel und sind fest im Anfrage-Prozess verankert. Für den Moment konzentrieren wir uns aber auf den HTTP-Kernel (app/Http/Kernel.php).

Bild: Play-Doh Spaghetti Maker !

Der HTTP-Kernel funktioniert ähnlich wie eine Play-Doh Maschiene …

Der HTTP-Kernel erweitert die Illuminate\Foundation\Http\Kernel Klasse und definiert ein Array mit bootstrappers die ausgeführt werden, bevor eine Anfrage verarbeitet wird. Dabei wird bspw. die Fehlerbehandlung eingerichtet, das Protokollieren wird eingeschaltet, die Umgebungsvariablen werden eingspeisst und andere Aufgaben, welche für eine sichere Verarbeitung der Anfrage benötigt werden implementiert der HTTP-Kernel für Dich.

Des weiteren definiert der HTTP-Kernel eine Liste mit aktiven Middleware welche die Anfrage durchlaufen musss, bevor die Anwendung selbst um die Anfrage kümmert. Diese Middleware sind Hauptsächlich zum lesen und schreiben von HTTP-Sessions, zum einschalten des Wartungsmodus, zum verifizieren des CSRF-Token und mehr zuständig.

Die Verarbeitung (handle Methode) einer Anfrage durch den HTTP-Kernel ist simpel: Empfange eine Anfrage (Request) und liefere eine Antwort (Response). Stell Dir unter dem HTTP-Kernel eine grosse Play-Doh Maschiene vor, bei welcher die Anfragen als Knettmasse eingehen und als wundeschöne Formen (Antworten) wieder zurückgeliefert werden.

Service-Provider Anfordern

Einer der wohl wichtigsten Aufgaben des Kernels ist, dass anfordern der Service-Provider für Deine Anwendung, dazu gehören auch die Service-Provider des Basissystems. Alle Service-Provider des Basissystems werden in der config/app.php innerhalb des providers Schlüssel des Konfigurationsarrays aufgeführt. Bei allen Service-Provider wird immer zuerst die register Methode ausgeführt, sobald sich alle Service-Provider „registriert“ haben, werden die boot Methoden aufgerufen.

Beim Service-Provider handelt es sich um ein Entwurfsmuster für eine zentrale Registrierung von Objekten. Da das Basissystem selbst aus einzelnen Komponenten besteht, fällt auch das Basissystem selbst in diese Kategorie. Der Service-Provider übernimmt dabei die wohl entscheindenste Rolle, wenn es um das Verwalten von Objekten innerhalb des Basissystems geht.

Anfrage Verarbeiten

Sobald das Basissystem zur Verfügung steht (bootstraping) und alle Service-Provider registriert wurden wird ein Request Objekt generiert und an den Router übermittelt. Der Router wiederum versucht das Request Objekt einer Route oder einer Controller Methode zuzuweisen und durchläuft dabei die Route spezifischen Middlewares.

Die Rolle der Service-Provider

../_images/mad-space-idiocy.png

Beim Service-Provider handelt es sich um ein Entwurfsmuster für eine zentrale Registrierung von Objekten. Wir verwenden Service-Provider um Kontrolle über die Instanziierungen von neuen oder bestehenden Klassen innerhalb des Basissystem zu erhalten. Eine Instanz des Basissystems wird erstellt, alle Service-Provider werden registriert und gestartet, anschliessend wird die Anfrage an das Basisystem übermittelt. So einfach ist dieses Prinzip!

Routing & Middleware

Um die HTTP-Anfragen zu bearbeiten stellt das Basissystem die nachfolgenden Konzepte bereit. Mithilfe von Routing kannst Du das sogenannte URL-Mapping vornehmen. Die Anfrage wird dabei einer bestimmten Controller Methode oder Closure Funktion zugewiesen und durchläuft dabei die Middlewares: