HTTP-Verarbeitung ################################################################################ .. index:: Front-Controller Front-Controller ******************************************************************************** .. figure:: ../assets/img/front-controller.svg :alt: Bild: HTTP-Request durch Front-Controller ! :align: center 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. .. include:: ../_terms/front-controller.txt 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 :ref:`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`). .. figure:: ../assets/img/play-doh-spaghetti.jpg :alt: Bild: Play-Doh Spaghetti Maker ! Der HTTP-Kernel funktioniert ähnlich wie eine Play-Doh Maschiene ... .. _http-kernel: .. index:: HTTP-Kernel .. include:: ../_terms/http-kernel.txt Des weiteren definiert der HTTP-Kernel eine Liste mit aktiven :ref:`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 :ref:`HTTP-Sessions `, zum einschalten des :ref:`Wartungsmodus `, :ref:`zum verifizieren des CSRF-Token ` und mehr zuständig. Die Verarbeitung (:code:`handle` Methode) einer Anfrage durch den HTTP-Kernel ist simpel: Empfange eine Anfrage (:code:`Request`) und liefere eine Antwort (:code:`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. .. index:: service-provider Service-Provider Anfordern ========================== Einer der wohl wichtigsten Aufgaben des Kernels ist, dass anfordern der :ref:`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 :code:`providers` Schlüssel des Konfigurationsarrays aufgeführt. Bei allen Service-Provider wird immer zuerst die :code:`register` Methode ausgeführt, sobald sich alle Service-Provider "registriert" haben, werden die :code:`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 :code:`Request` Objekt generiert und an den Router übermittelt. Der Router wiederum versucht das :code:`Request` Objekt einer Route oder einer Controller Methode zuzuweisen und durchläuft dabei die Route spezifischen Middlewares. Die Rolle der Service-Provider ******************************************************************************** .. image:: ../assets/img/mad-space-idiocy.png .. include:: ../_terms/service-provider.txt 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: .. toctree:: :maxdepth: 1 http/routing http/middleware