Skip to content

Booting

Im Ordner app/Boot befinden sich einige Klassen, die für den Boot-Vorgang des Frameworks benötigt werden.

App-Klasse

Die Klasse App\Boot\App, die von der Core-Klasse RHRZ\Framework\Application erbt, bildet das Zentrum eines Framework-Projekts. Sie enthält einige allgemeine Methoden und dient gleichzeitig als statischer Dependency Container, also als globaler Behälter für Abhängigkeiten, die projektweit zur Verfügung stehen sollen.

Eigenschaften

Die Klasse App erbt folgende statische Eigenschaften von ihrer Elternklasse. Einige davon werden in der Klasse selbst initialisiert, andere in Providern.

EigenschaftInstanz vonInitialisierung in
configRHRZ\Framework\ConfigApp\Boot\App
debugRHRZ\Framework\DebugApp\Boot\App
routerRHRZ\Router\RouterApp\Boot\App
requestRHRZ\Framework\RequestApp\Boot\App
dbRHRZ\ORM\DatabaseDatabaseProvider
validatorRHRZ\Framework\ValidatorValidatorProvider
langRHRZ\Framework\LanguageLanguageProvider
twigTwig\EnvironmentTwigProvider
formRHRZ\Form\FormFormProvider

Bei Bedarf können weitere statische Eigenschaften in der Klasse App\Boot\App deklariert und durch eigene Provider initialisiert werden.

Methoden

Die Klasse App erbt folgende statische Methoden von ihrer Elternklasse.

  • App::env(string $name) liest Konfigurationsoptionen aus der Datei env.php.
  • App::config(string $name) liest Konfigurationsoptionen aus dem Ordner config.
  • App::abort(int $code = 404) bricht den aktuellen Request mit einer AbortionException ab. Statt 404 (Not Found) kann auch ein anderer Statuscode übergeben werden.
  • App::route(string $name, array|object $data = []) generiert einen Pfad zu einer Route (siehe Pfade generieren).
  • App::getEnv() gibt die Umgebung der Anwendung als Enum zurück.
  • App::checkEnv(string|Env ...$envs): bool überprüft, ob die Anwendung in einer der übergebenen Umgebungen ausgeführt wird. Als Parameter können die Strings local, dev, stage und prod oder die entsprechenden Enum-Werte übergeben werden.

Zugriff

Auf die Eigenschaften und Methoden der Klasse App kann von jeder Stelle des Projekts zugegriffen werden.

php
use App\Boot\App;

App::$db->schema->validate();
App::route('product.edit', $product);

In den Twig Views erfolgt der Zugriff über die globale Variable app.

html
<a href="{{ app.route('product.edit', product) }}">Produkt bearbeiten</a>

Kernels

Kernels definieren, welche Middleware und Provider für bestimmte Arten von Requests ausgeführt werden. Im Framework sind zwei Kernels enthalten, die in der Klasse App\Boot\App den Konstanten HTTP_KERNEL und CLI_KERNEL zugewiesen werden.

Beide Kernels erben von gleichnamigen Klassen im Namespace RHRZ\Framework\Kernels, in denen Core-Middleware und Core-Provider eingebunden werden.

Anpassung

Um Middleware und Provider zu ersetzen oder zu ergänzen, können folgende Methoden der Kernels angepasst werden.

  • Mit replaceMiddleware kann bestimmte Core-Middleware durch eigene Middleware ersetzt werden.
  • Mit appendMiddleware kann eigene Middleware ergänzt werden, welche an die Core-Middleware angehängt wird.
  • Mit replaceProviders können bestimmte Core-Provider durch eigene Provider ersetzt werden.
  • Mit appendProviders können eigene Provider ergänzt werden.

Bei den replace-Methoden wird ein assoziatives Array zurückgegeben, wobei die Schlüssel die Namen der zu ersetzenden Core-Klassen und die Werte die Namen der eigenen Klassen sind.

Bei den append-Methoden wird ein numerisches Array zurückgegeben, dessen Werte die Namen der anzuhängenden Klassen sind.

Providers

Provider dienen dazu, globale Abhängigkeiten zu initialisieren, zum Beispiel statische Eigenschaften der Klasse App\Boot\App. Sie liegen im Ordner app/Boot/Providers und erben von der abstrakten Klasse RHRZ\Framework\Provider. Es muss lediglich die Methode invoke deklariert werden.

php
namespace App\Boot\Providers;

use App\Boot\App;
use RHRZ\Framework\Provider;

class ExampleProvider extends Provider
{
    protected function invoke(): void
    {
        App::$example = new ExampleDependency();
        
        // ...
    }
}

Ausführung

Provider werden von der Middleware ExecuteProviders entsprechend der in den Kernels festgelegten Reihenfolge ausgeführt.