> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Request-Lebenszyklus

> Erläutert, wie HTTP-Anfragen und Konsolenbefehle in einer Laravel-Anwendung verarbeitet werden.

## 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

```mermaid theme={null}
flowchart TD
    A[Browser/HTTP-Anfrage] --> B[public/index.php]
    B --> C[Composer-Autoloader laden]
    C --> D[bootstrap/app.php]
    D --> E[Anwendungsinstanz erzeugen<br>Service Container]
    E --> F[HTTP-Kernel]
    F --> G[Bootstrapper ausführen<br>Fehlerbehandlung/Logging/Umgebungserkennung]
    G --> H[Service Provider registrieren und starten<br>register → boot]
    H --> I[Middleware-Stack durchlaufen]
    I --> J[Routing]
    J --> K[Controller/Closure ausführen]
    K --> L[Antwort erzeugen]
    L --> I
    I --> M[Antwort an Browser senden]
```

### 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](/de/service-container) 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](/de/installation)
* 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](/de/session), prüft, ob sich die Anwendung im Wartungsmodus befindet, überprüft das [CSRF-Token](/de/middleware) 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](/de/service-providers) 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.

<Info>
  Selbst geschriebene oder Drittanbieter-Provider registrieren Sie in der Datei `bootstrap/providers.php`.
</Info>

### 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

```mermaid theme={null}
flowchart TD
    A[artisan-Befehl ausführen] --> B[artisan]
    B --> C[Composer-Autoloader laden]
    C --> D[bootstrap/app.php]
    D --> E[Anwendungsinstanz erzeugen<br>Service Container]
    E --> F[Konsolen-Kernel<br>handleCommand]
    F --> G[Service Provider registrieren und starten<br>register → boot]
    G --> H[Befehle laden<br>app/Console/Commands]
    H --> I[Befehl ausführen]
    I --> J[Exit-Code zurückgeben]
```

### 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.

```shell theme={null}
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.

<Info>
  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.
</Info>

### Der Unterschied zwischen register und boot

Service Provider haben zwei zentrale Methoden.

| Methode    | Zeitpunkt                                                                 | Zweck                                                       |
| ---------- | ------------------------------------------------------------------------- | ----------------------------------------------------------- |
| `register` | Wird nach der Instanziierung aller Provider für alle aufgerufen           | Ausschließlich Bindings im Service Container registrieren   |
| `boot`     | Wird nach Abschluss aller `register`-Aufrufe für alle Provider aufgerufen | View Composer, Event Listener und weitere Initialisierungen |

<Warning>
  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.
</Warning>

## Nächste Schritte

<Card title="Service Container" icon="box" href="/de/service-container">
  Verstehen Sie Dependency Injection und die Funktionsweise des Service Containers.
</Card>

<Card title="Service Provider" icon="plug" href="/de/service-providers">
  Lernen Sie, wie Sie Ihre Anwendung mit Service Providern bootstrappen.
</Card>


## Related topics

- [Laravel MCP](/de/mcp.md)
- [Service-Provider](/de/service-providers.md)
- [Session-Lebenszyklus-Ereignisse](/de/packages/laravel-copilot-sdk/session-lifecycle-event.md)
- [Session-Hooks](/de/packages/laravel-copilot-sdk/hooks.md)
- [SessionConfig](/de/packages/laravel-copilot-sdk/session-config.md)
