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.
Eigenschaft | Instanz von | Initialisierung in |
---|---|---|
config | RHRZ\Framework\Config | App\Boot\App |
debug | RHRZ\Framework\Debug | App\Boot\App |
router | RHRZ\Router\Router | App\Boot\App |
request | RHRZ\Framework\Request | App\Boot\App |
db | RHRZ\ORM\Database | DatabaseProvider |
validator | RHRZ\Framework\Validator | ValidatorProvider |
lang | RHRZ\Framework\Language | LanguageProvider |
twig | Twig\Environment | TwigProvider |
form | RHRZ\Form\Form | FormProvider |
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 Dateienv.php
.App::config(string $name)
liest Konfigurationsoptionen aus dem Ordnerconfig
.App::abort(int $code = 404)
bricht den aktuellen Request mit einerAbortionException
ab. Statt404
(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 Stringslocal
,dev
,stage
undprod
oder die entsprechenden Enum-Werte übergeben werden.
Zugriff
Auf die Eigenschaften und Methoden der Klasse App
kann von jeder Stelle des Projekts zugegriffen werden.
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
.
<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.
App\Boot\Kernels\HTTP
ist zuständig für HTTP-RequestsApp\Boot\Kernels\CLI
ist zuständig für CLI-Requests
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.
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.