Zum Hauptinhalt springen

Einführung

Wenn Sie ein Werkzeug in der „realen Welt” einsetzen, können Sie es umso selbstbewusster verwenden, je besser Sie verstehen, wie es funktioniert. In der Anwendungsentwicklung gilt dasselbe: Wenn Sie verstehen, wie Ihre Entwicklungswerkzeuge arbeiten, entwickeln Sie souveräner und komfortabler. Diese Seite gibt Ihnen einen Überblick auf hoher Ebene, wie das Laravel-Framework arbeitet. Wenn Sie das Framework als Ganzes gut verstehen, wirkt nichts mehr wie „Magie” und Ihr Vertrauen in den eigenen Entwicklungsprozess wächst.

Lebenszyklus einer HTTP-Anfrage

Gesamter Ablauf

Erste Schritte

Der Einstiegspunkt jeder Anfrage an eine Laravel-Anwendung ist die Datei public/index.php. Alle Anfragen werden über die Konfiguration Ihres Webservers (Apache/Nginx) an diese Datei weitergeleitet. Die index.php-Datei selbst enthält kaum Code. Sie ist der Ausgangspunkt zum Laden des restlichen Frameworks. Die Datei index.php lädt die vom Composer erzeugte Autoloader-Definition und holt eine Instanz der Laravel-Anwendung aus bootstrap/app.php. Der erste Schritt von Laravel besteht darin, eine Instanz der Anwendung bzw. des Service Containers zu erzeugen.

HTTP-Kernel

Anschließend wird die eingegangene Anfrage an den HTTP-Kernel (Illuminate\Foundation\Http\Kernel) übergeben und über die handleRequest-Methode der Anwendungsinstanz verarbeitet. Der HTTP-Kernel definiert ein Array von Bootstrappern, die vor der Ausführung der Anfrage laufen. Diese Bootstrapper übernehmen folgende Aufgaben:
  • Fehlerbehandlung konfigurieren
  • Logging konfigurieren
  • Anwendungsumgebung erkennen
  • Weitere Aufgaben, die vor der Request-Verarbeitung nötig sind
Der HTTP-Kernel ist außerdem dafür zuständig, die Anfrage durch den Middleware-Stack der Anwendung zu schleusen. Diese Middleware kümmert sich um Lesen und Schreiben der HTTP-Session, prüft, ob sich die Anwendung im Wartungsmodus befindet, überprüft das CSRF-Token und vieles mehr. Die Signatur der handle-Methode des HTTP-Kernels ist simpel: Sie erhält einen Request und liefert einen Response. Stellen Sie sich den Kernel als große Blackbox vor, die Ihre gesamte Anwendung repräsentiert: HTTP-Anfrage rein, HTTP-Antwort raus.

Service Provider

Eine der wichtigsten Aufgaben beim Bootstrapping des Kernels ist das Laden der Service Provider der Anwendung. Service Provider sind dafür verantwortlich, die verschiedenen Komponenten des Frameworks wie Datenbank, Queue, Validierung oder Routing zu initialisieren. Laravel iteriert durch die Liste der Provider und instanziiert jeden von ihnen. Nach der Instanziierung wird die register-Methode jedes Providers aufgerufen. Sobald alle Provider registriert sind, wird die boot-Methode jedes Providers aufgerufen. Zum Zeitpunkt der boot-Methode sind daher bereits alle Container-Bindings registriert und einsatzbereit.
Selbst geschriebene oder Drittanbieter-Provider registrieren Sie in der Datei bootstrap/providers.php.

Routing

Sobald die Anwendung gebootstrappt und alle Service Provider registriert sind, wird der Request an den Router übergeben und dispatched. Der Router leitet die Anfrage an eine Route oder einen Controller weiter und führt zudem die routenspezifische Middleware aus. Middleware bietet einen praktischen Mechanismus, um eingehende HTTP-Anfragen zu filtern oder zu prüfen. Laravel enthält zum Beispiel eine Middleware, die prüft, ob der Nutzer authentifiziert ist. Ist er es nicht, leitet die Middleware zum Login-Bildschirm um. Ist er authentifiziert, wird die Anfrage in die Anwendung weitergegeben. Wenn die Anfrage alle der zugeordneten Route zugewiesenen Middlewares durchlaufen hat, wird die Route- oder Controller-Methode ausgeführt und eine Antwort erzeugt.

Antwort zurücksenden

Sobald die Route oder Controller-Methode eine Antwort zurückgibt, durchläuft die Antwort die Middleware der Route in umgekehrter Reihenfolge nach außen. So können die Middlewares die von der Anwendung zurückgegebene Antwort noch verändern oder prüfen. Wenn die Antwort schließlich die Middleware verlassen hat, gibt die handle-Methode des HTTP-Kernels das Response-Objekt an handleRequest der Anwendungsinstanz zurück, welche die send-Methode der Antwort aufruft. Die send-Methode überträgt den Inhalt der Antwort an den Browser des Benutzers. Damit ist die gesamte Reise durch den Laravel-Request-Lebenszyklus abgeschlossen.

Lebenszyklus eines Konsolenbefehls

Gesamter Ablauf

Einstiegspunkt artisan

Der Einstiegspunkt für Konsolenbefehle ist die Datei artisan im Projekt-Root. Analog zur HTTP-Anfrage werden der Composer-Autoloader und eine Instanz der Laravel-Anwendung erzeugt. Anschließend wird die Verarbeitung über die handleCommand-Methode der Anwendungsinstanz an den Konsolen-Kernel übergeben.

Konsolen-Kernel und Ausführung des Befehls

Auch der Konsolen-Kernel lädt Service Provider, genau wie der HTTP-Kernel. Nachdem alle Provider registriert und gestartet wurden, werden die Befehle aus dem Verzeichnis app/Console/Commands geladen und der angegebene Befehl ausgeführt.
php artisan make:controller UserController
Dieser Befehl wird wie folgt verarbeitet:
  1. Die Datei artisan lädt den Composer-Autoloader.
  2. Aus bootstrap/app.php wird eine Anwendungsinstanz erzeugt.
  3. Der Konsolen-Kernel lädt die Service Provider.
  4. Der Befehl make:controller wird gesucht und ausgeführt.
  5. Der Exit-Code wird zurückgegeben.

Der Fokus auf Service Provider

Service Provider sind der eigentliche Schlüssel zum Bootstrapping einer Laravel-Anwendung. Die Anwendungsinstanz wird erzeugt, die Service Provider werden registriert und die Anfrage wird an die gebootstrappte Anwendung übergeben. Mehr ist es nicht. Es lohnt sich enorm, wirklich zu verstehen, wie eine Laravel-Anwendung mithilfe von Service Providern aufgebaut und gebootstrappt wird. Ihre eigenen Service Provider werden im Verzeichnis app/Providers abgelegt.
Der Standard-AppServiceProvider ist fast leer. Er eignet sich hervorragend, um anwendungsspezifisches Bootstrapping und Bindings für den Service Container hinzuzufügen. In großen Anwendungen empfiehlt es sich, mehrere Service Provider zu erstellen, in denen jeweils fein abgegrenzte Dienste bereitgestellt werden.

Der Unterschied zwischen register und boot

Service Provider haben zwei zentrale Methoden.
MethodeZeitpunktZweck
registerWird nach der Instanziierung aller Provider für alle aufgerufenAusschließlich Bindings im Service Container registrieren
bootWird nach Abschluss aller register-Aufrufe für alle Provider aufgerufenView Composer, Event Listener und weitere Initialisierungen
Registrieren Sie in der register-Methode keine Event Listener, Routen oder andere Funktionen. Sie könnten sonst versehentlich Dienste verwenden, deren Service Provider noch nicht geladen ist.

Nächste Schritte

Service Container

Verstehen Sie Dependency Injection und die Funktionsweise des Service Containers.

Service Provider

Lernen Sie, wie Sie Ihre Anwendung mit Service Providern bootstrappen.
Zuletzt geändert am 13. Juli 2026