Der Request-Lebenszyklus
Diese Seite richtet sich an Entwickler, die wissen möchten, wo ihr Code bei einem Web-Request ausgeführt wird, so wie
sie die HttpKernel-Ereignisse von Symfony, die Middleware-Pipeline von Laravel oder den Request- und Response-Zyklus
von Django kennen. Die maßgebliche Beschreibung ist Der Request-Lebenszyklus in der Kernel-Architektur;
diese Seite geht ihn mit den Augen eines Framework-Entwicklers durch.
Inhalt
- Die Schritte
- Dieselben Schritte als Pipeline
- Wo Sie sich einklinken können
- Unter persistenten Workern
- Requests auf der Kommandozeile
Die Schritte
index.php. Wennvar/maintenance.jsonexistiert, kannexpMaintenance::check()antworten (Wartungsmodus). Ein Request mitexp_repairwird anezpRepairQueueübergeben. Danach lädtautoload.phpden Autoloader von Composer und die erzeugten Klassenzuordnungen,config.env.phpundconfig.phpwerden gelesen, und$kernel = new ezpKernel( new ezpKernelWeb() ); echo $kernel->run()->getContent();führt den Request aus.- Aufbau des Kernels.
ezpKernelWebliesti18n.iniundsite.ini, aktiviert die globalen Erweiterungen, ermittelt den Siteaccess miteZSiteAccess::match()anhand von Request-URI und Host, wechselt miteZSiteAccess::change()zu ihm, aktiviert die Erweiterungen des Siteaccess und lädt die Einstellungen neu, damit die Siteaccess-Ebene greift (Siteaccesses). - Initialisierung von Sitzung und Request (
sessionInit(),requestInit()), danach die Ereignisserequest/preinputundrequest/input. Die CSRF-Prüfung vonezformtokenist ein Listener aufrequest/input. - URL-Übersetzung. Ein URL-Alias (
/About-us) wird übereZURLAliasMLzu einer Systemadresse (content/view/full/58); URL-Platzhalter werden übereZURLWildcardangewendet (Sprechende URLs). - Modulsuche und Zugriffsprüfungen. Das Modul muss in einem Modul-Repository existieren und erlaubt sein
(
eZModule::accessAllowed()); die Anmeldeprüfung des Siteaccess (Richtlinieuser/login) und die Richtlinienfunktionen der View (eZUser::hasAccessToView()) laufen vor der View. Request-Regeln entscheiden nach der Alias-Übersetzung und nachdem die Richtlinien die View erlaubt haben (Middleware: Request-Regeln). - Die View läuft.
$module->run( $functionName, $params, ... )führt das View-Skript oder die KlasseModuleViewaus, die ein$Result-Array zurückgibt. Eine View kann einen erneuten Durchlauf mit einer anderen URI oder eine Weiterleitung anfordern (eZModule::STATUS_RERUN,STATUS_REDIRECT); die Dispatch-Schleife behandelt beides (Controller). - Seitenlayout und Ausgabe. Der
contentdes Ergebnisses wird in daspagelayout.tpldes Siteaccess eingesetzt (sofern die View kein anderes oder gar keines gewählt hat), durch die Ausgabefilterresponse/preoutputundresponse/outputgeleitet und zurückgegeben.ezformtokenfügt in einem Listener aufresponse/outputsein verstecktes Token in Formulare ein. - Abschluss. Ausstehende Daten werden geschrieben; unter Velocity setzt der Worker seinen Zustand für den nächsten Request zurück.
Dieselben Schritte als Pipeline
| Aufgabe | Symfony | Laravel | Django | Exponential |
|---|---|---|---|---|
| Einstieg | public/index.php, Kernel::handle() | public/index.php, HTTP-Kernel | WSGI- oder ASGI-Handler | index.php, ezpKernel::run() |
| Frühe Antwort | Listener auf kernel.request | globale Middleware | Middleware | Wartungsprüfung, früher Ausstieg des HTTP-Cache, Response-Cache von Velocity |
| Mandant oder Site | Host-Anforderung, eigener Listener | Domain-Routen | Site-Framework | Siteaccess-Erkennung |
| Routing | Router | Router | URLconf | Übersetzung von URL-Alias und Platzhaltern, danach <module>/<view> |
| Autorisierung vor der Aktion | Firewall, Voter | Middleware auth und can | Decorators | functions der View, Anmeldeprüfung des Siteaccess, Request-Regeln |
| Aktion | Controller | Controller | View-Funktion | Modul-View |
| Darstellung | Twig | Blade | Templates | Template-Sprache und Seitenlayout |
| Response-Filter | kernel.response | terminierbare oder nachgelagerte Middleware | Middleware | Filter response/output |
Wo Sie sich einklinken können
| Bedarf | Einstiegspunkt | Lesen |
|---|---|---|
| Vor dem Routing antworten oder ablehnen | Listener auf request/preinput oder request/input | Ereignisse und Listener |
| Per Regel ablehnen, weiterleiten, umschreiben oder protokollieren, sobald der Alias bekannt ist | Request-Regeln | Middleware |
| Eine neue Adresse | ein Modul und eine View in Ihrer Erweiterung | Routing |
| Eine Kernel-View ändern | eine Neuimplementierung der View-Klasse (site.ini [RunnableSettings] Implementation[]) oder ein Modul-Override | Controller |
| Das endgültige HTML ändern | Filter-Listener auf response/output | Ereignisse und Listener |
| Rund um Inhaltsoperationen ausführen | Workflows und Trigger | Workflows |
Unter persistenten Workern
Unter Velocity wird die Anwendung einmal in einem Elternprozess geladen und in Worker geforkt, die jeweils viele
Requests bedienen. Die Schritte 2 bis 8 laufen pro Request, aber alles, was eine Klasse in einer statischen
Eigenschaft hält, überlebt bis in den nächsten Request, sofern es nicht zurückgesetzt wird. Die Regeln des Kernels:
kein Request-bezogener Zustand in statischen Eigenschaften ohne Zurücksetzen, kein exit zur Ablaufsteuerung außer
über eZExecution::cleanExit(), und eine geänderte Klasse oder Einstellung erreicht die Worker erst nach
./console exp:velocity restart oder exp:velocity deploy
(Server: Velocity, PHP-FPM und FrankenPHP).
Wenn Sie Laravel Octane oder Symfony auf RoadRunner kennen: Es gilt dieselbe Disziplin.
Requests auf der Kommandozeile
Konsolenbefehle, Cronjob-Teile und Queue-Worker verwenden ezpKernelWeb nicht. Sie starten über eZScript, das die
Einstellungen für den mit -s angegebenen Siteaccess lädt, und laufen als anonymer Benutzer, sofern der Code keinen
Benutzer anmeldet (Kommandozeile).
Verwandte Seiten
- Architektur für Anwendungsentwickler
- Das Front-Controller-Muster
- Velocity: der Server mit persistenten Workern
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.