Der Lebenszyklus einer Anfrage
Diese Seite folgt einer Webanfrage durch Exponential, von index.php bis zur Antwort, und nennt Klasse und Datei jedes
Schritts. Sie ist die Zusammenfassung von
Der Lebenszyklus einer Anfrage im Standard
zur Kernel-Architektur; lesen Sie diesen Abschnitt, wenn Sie etwas auf diesem Weg ändern.
Inhalt
- Vor dem Kernel
- Der Konstruktor des Kernels
- Die Weiterleitungsschleife
- Ausgabe und Herunterfahren
- Abkürzungen: wer zuerst antworten kann
- Derselbe Code außerhalb einer Webanfrage
- Regeln für Änderungen auf diesem Weg
Vor dem Kernel
- Wartungs- und Reparatur-Hooks. Existiert
var/maintenance.json, kannexpMaintenance::check()(kernel/classes/expmaintenance.php) die Anfrage mit der Wartungsseite beantworten. Eine Anfrage mitexp_repairwird anezpRepairQueue(lib/ezutils/classes/ezprepairqueue.php) übergeben, das eine Installation ohne ihre Composer-Bibliotheken reparieren kann (Reparatur aus dem Browser). - Autoload.
autoload.phplädt die erzeugten Klassenzuordnungen:autoload/ezp_kernel.phpund die Zuordnung der Erweiterungen, diephp bin/php/ezpgenerateautoloads.php -eschreibt. - Kernel-Objekt.
new ezpKernel( new ezpKernelWeb() ), dann$kernel->run()->getContent().ezpKernelist eine dünne Hülle um einen Handler, derezpWebBasedKernelHandlerimplementiert.
Der Konstruktor des Kernels
ezpKernelWeb (kernel/private/classes/ezpkernelweb.php), der Reihe nach:
| Schritt | Was geschieht |
|---|---|
| Einstellungen | liest i18n.ini und site.ini, setzt Zeitzone und Dateiberechtigungen, initialisiert eZSys |
| Globale Erweiterungen | eZExtension::activateExtensions( 'default' ) |
| Siteaccess | eZSiteAccess::match() auf die Anfrage-URI, sofern keiner injiziert wurde, dann eZSiteAccess::change() |
| Siteaccess-Erweiterungen | eZExtension::activateExtensions( 'access' ), und die INI-Instanzen werden zurückgesetzt, damit Siteaccess-Einstellungen gelten |
Die Weiterleitungsschleife
run() und dispatchLoop():
- Initialisierung von Session und Anfrage (
sessionInit(),requestInit()). - Die Events
request/preinputundrequest/input(Events, Erweiterungspunkte und Plugins). - URL-Übersetzung: ein URL-Alias oder -Platzhalter wird zu einer Moduladresse (
eZURLAliasML,eZURLWildcard);/About-uswird zum Beispiel zucontent/view/full/58. - Die Modulprüfung (
eZModule::accessAllowed()),fetchModule(), die Anmeldeprüfung des Siteaccess (die Richtlinieuser/login) und die Zugriffsprüfung der View (eZUser::hasAccessToView()). - Anfrageregeln entscheiden, wenn konfiguriert, nach der URL-Übersetzung und der Richtlinienprüfung, ob erlaubt, verweigert, umgeleitet, umgeschrieben oder protokolliert wird (Anfrageregeln).
$module->run( $functionName, $params, ... )führt die View aus. Eine View kann einen erneuten Lauf mit einer anderen URI oder eine Weiterleitung anfordern (eZModule::STATUS_RERUN,STATUS_REDIRECT); die Schleife behandelt beides.
Ausgabe und Herunterfahren
- Das
$Resultder View wird in das Pagelayout gesetzt (pagelayout.tpl, sofern die View kein anderes setzt), durcheZDisplayResult()und die Ausgabefilterresponse/preoutputundresponse/outputgeleitet (kernel/private/classes/global_functions.php). shutdown()schreibt ausstehende Daten. Unter Velocity wird der Worker danach für die nächste Anfrage zurückgesetzt (Persistente Worker von Velocity).- Jede Anfrage wird einmal klassifiziert, wie auch immer sie endet, und eine Nicht-gefunden-Antwort oder ein Sondierungsversuch geht in ein eigenes Log (Anfrage-Logs).
Abkürzungen: wer zuerst antworten kann
| Wer | Wann | Kernel gestartet? |
|---|---|---|
| Browser oder CDN | die Seite oder Datei ist in deren Cache noch frisch | gar keine Anfrage |
| Antwort-Cache von Velocity | eine öffentliche Seite liegt im Serverprozess im Cache | nein |
| Rollenbewusster HTTP-Cache | eingeschaltet, und eine gespeicherte Ansicht passt zum Berechtigungskontext | nein (ein früher Ausstieg aus config.php unter PHP-FPM) |
| Wartungs-Hook | der Wartungsmodus ist an | teilweise (vor dem Kernel) |
| View-Cache für Inhalte | eine zwischengespeicherte Kopie dieser Inhaltsansicht existiert | ja, aber die Ansicht wird nicht gerendert |
Details: Caching-Ebenen für Ingenieure.
Derselbe Code außerhalb einer Webanfrage
Kommandozeilenskripte und Cronjobs verwenden nicht ezpKernelWeb: Sie starten über eZScript. Die Konsole
(bin/php/console) findet Befehle; runcronjobs.php führt Cronjob-Teile aus
(Konsole, Cronjobs und Hintergrundarbeit).
Regeln für Änderungen auf diesem Weg
- Eine Änderung muss unter PHP-FPM, Velocity und FrankenPHP weiter funktionieren.
- Code in
ezpKernelWebsichert neuere Klassen mitclass_exists()ab, weil ein langlaufender Velocity-Worker seine Klassenzuordnung geladen haben kann, bevor die Klasse existierte; neue Kernel-Hooks sollten es genauso tun. - Zustand je Anfrage darf nicht ohne Zurücksetzen in statischen Eigenschaften liegen.
- Kein
exitzur Ablaufsteuerung, außer übereZExecution::cleanExit().
Verwandte Seiten
- Architekturüberblick
- Module, Views und Zugriffskontrolle
- Nebenläufigkeit, Statics und langlebige Prozesse
- 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.