In diesem Artikel werden hauptsächlich der Betriebsmechanismus und die Routing-Funktion des Yii-Frameworks von PHP vorgestellt. Yii ist ein schweres PHP-Framework, das auf Komponenten basiert und für die Entwicklung großer Websites geeignet ist. Freunde in Not können sich darauf berufen. Ich hoffe, es hilft allen.
Überblick über den Betriebsmechanismus
Jedes Mal, wenn die Yii-Anwendung mit der Verarbeitung einer HTTP-Anfrage beginnt, durchläuft sie einen ungefähren Prozess.
Der Benutzer sendet eine Anfrage an das Eingabeskript web/index.php.
Das Eingabeskript lädt das Konfigurationsarray und erstellt eine Anwendungsinstanz zur Bearbeitung der Anfrage.
Die Anwendung löst die angeforderte Route über die Anforderungsanwendungskomponente auf.
Die Anwendung erstellt eine Controller-Instanz, um die Anfrage gezielt zu bearbeiten.
Der Controller erstellt eine Aktionsinstanz und führt die relevanten Filter (Zugriffsfilter) für die Aktion aus.
Wenn ein Filter die Validierung nicht besteht, wird die Aktion abgebrochen.
Wenn alle Filter bestehen, wird die Aktion ausgeführt. Die Aktion
lädt ein Datenmodell, normalerweise aus einer Datenbank. Die Aktion
rendert eine Ansicht und stellt ihr das erforderliche Datenmodell zur Verfügung.
Das gerenderte Ergebnis wird an die Antwortanwendungskomponente zurückgegeben.
Die Antwortkomponente sendet das Rendering-Ergebnis zurück an den Browser des Benutzers.
Das Diagramm unten zeigt, wie die Anwendung eine Anfrage verarbeitet.
Bootstrapping
Bootstrapping bezieht sich auf: eine vorbereitete Umgebung, bevor die Anwendung mit dem Parsen und Verarbeiten neuer akzeptierter Anforderungen beginnt. Die Starthilfe wird an zwei Stellen durchgeführt: Eingabeskript (Eingabeskript) und Anwendungstext (Anwendung).
Im Eingabeskript müssen Sie den Klassendatei-Autoloader (Klassen-Autoloader, auch Autoloader genannt) jeder Klassenbibliothek registrieren. Dazu gehören hauptsächlich der Composer-Autoloader, der über seine Datei autoload.php geladen wird, und der Yii-Autoloader, der über die Yii-Klasse geladen wird. Das Eingabeskript lädt dann die Konfiguration der Anwendung und erstellt eine Instanz des Anwendungsprinzipals.
Im Konstruktor des Anwendungskörpers wird die folgende Startarbeit ausgeführt:
Rufen Sie zur Konfiguration die Methode yiibaseApplication::preInit() (Vorinitialisierung) auf einige Anwendungsattribute mit hoher Priorität, wie z. B. das Attribut yiibaseApplication::basePath.
Registrieren Sie yiibaseApplication::errorHandler.
Initialisiert die Eigenschaften der Anwendung mit der angegebenen Anwendungskonfiguration.
Durch den Aufruf der Methode yiibaseApplication::init() (Initialisierung) wird yiibaseApplication::bootstrap() nacheinander aufgerufen, um die Bootstrap-Komponente auszuführen.
Laden Sie die Erweiterungsmanifestdatei „vendor/yiisoft/extensions.php“.
Erstellen Sie die von jeder Erweiterung deklarierten Bootstrap-Komponenten und führen Sie sie aus.
Erstellen und führen Sie jede Anwendungskomponente und jede Modulkomponente (falls vorhanden) aus, die im Bootstrap-Attribut der Anwendung deklariert ist.
Da vor der Verarbeitung jeder Anfrage ein Bootstrapping durchgeführt werden muss, ist es äußerst wichtig, diesen Prozess so einfach wie möglich zu gestalten. Bitte optimieren Sie diesen Schritt so weit wie möglich.
Bitte versuchen Sie, nicht zu viele Boot-Komponenten zu registrieren. Sie müssen es nur verwenden, wenn es während des gesamten Lebenszyklus der HTTP-Anfrageverarbeitung funktionieren soll. Um ein Beispiel für seine Verwendung zu geben: Wenn ein Modul zusätzliche URL-Parsing-Regeln registrieren muss, sollte es im Bootstrap-Attribut der Anwendung aufgeführt werden, damit die URL-Parsing-Regeln wirksam werden können, bevor die Anfrage analysiert wird. (Anmerkung: Mit anderen Worten: Aus Leistungsgründen sollten die meisten Komponenten, mit Ausnahme einiger Vorgänge wie der URL-Analyse, bei Bedarf geladen werden, anstatt alle in den Startvorgang eingefügt zu werden.)
In einer Produktionsumgebung Sie können Bytecode-Caching wie APC aktivieren, um die zum Laden und Parsen von PHP-Dateien erforderliche Zeit weiter zu minimieren.
Einige große Anwendungen enthalten sehr komplexe Anwendungskonfigurationen, die in viele kleinere Konfigurationsdateien aufgeteilt sind. An dieser Stelle können Sie erwägen, das gesamte Konfigurationsarray zwischenzuspeichern und direkt aus dem Cache zu laden, bevor das Eingabeskript die Anwendungsinstanz erstellt.
yii-Eintragsdatei
Ein Konfigurationsverwaltungs-Plug-in eines Drittanbieters: marcovwout wird hier verwendet, um die Konfiguration von Yii zu verwalten. Ich werde nicht auf die Details eingehen. Übrig bleiben nur noch einige grundlegende globale Variableneinstellungen. Übergeben Sie das Konfigurationsarray an Yii::createWebApplication und rufen Sie dann die Ausführungsmethode auf. Ja, die Abstraktion auf der höchsten Ebene erfolgt wie folgt: Ich übergebe die entsprechende Konfiguration an einen Container und dann kann die Anwendung ausgeführt werden basiert normalerweise auf dieser Konfiguration.
Lassen Sie uns über zwei wichtige Methoden in YiiBase sprechen (Import, Autoload)
Hier wird ein Konfigurationsverwaltungs-Plug-in eines Drittanbieters verwendet: marcovwout, um die Yii-Konfiguration zu verwalten. Ich werde nicht auf die Details eingehen. Übrig bleiben nur noch einige grundlegende globale Variableneinstellungen. Übergeben Sie das Konfigurationsarray an Yii::createWebApplication und rufen Sie dann die Ausführungsmethode auf. Ja, die Abstraktion auf der höchsten Ebene erfolgt wie folgt: Ich übergebe die entsprechende Konfiguration an einen Container und dann kann die Anwendung ausgeführt werden basiert normalerweise auf dieser Konfiguration.
Routing
Wenn das Eingabeskript die Methode yiiwebApplication::run() aufruft, besteht die erste Operation darin, die Eingabeanforderung zu analysieren und dann die entsprechenden Controller-Handles zu instanziieren diese Anfrage. Dieser Vorgang wird Routing genannt. (Anmerkung: Im Chinesischen ist es sowohl ein Verb als auch ein Substantiv)
Routen analysieren
Der erste Schritt bei der Routing-Anleitung besteht darin, die eingehende Anfrage in eine Route zu analysieren. Wie wir im Kapitel „Controller“ beschrieben haben, ist eine Route eine Adresse, die zum Lokalisieren von Controller-Aktionen verwendet wird. Dieser Prozess wird durch die Methode yiiwebRequest::resolve() der Anforderungsanwendungskomponente implementiert, die den URL-Manager aufruft, um die eigentliche Anforderungsauflösung durchzuführen.
Eingehende Anfragen enthalten standardmäßig einen GET-Parameter namens r, und sein Wert wird als Route behandelt. Wenn Sie jedoch yiiwebUrlManager::enablePrettyUrl aktivieren, erfolgt mehr Verarbeitung bei der Bestimmung der Route der Anforderung. Spezifische Einzelheiten finden Sie im Kapitel URL-Parsing und -Generierung.
Wenn eine Route am Ende nicht ermittelt werden kann, löst die Anforderungskomponente eine yiiwebNotFoundHttpException-Ausnahme aus (Anmerkung: der berühmte 404).
Standardroute
Wenn die eingehende Anfrage keine bestimmte Route bereitstellt (im Allgemeinen handelt es sich meist um eine Anfrage für die Homepage), wird die Standardroute aktiviert angegeben durch das yiiwebApplication::defaultRoute-Attribut. Der Standardwert für diese Eigenschaft ist site/index, der auf die Indexaktion des Site-Controllers verweist. Sie können den Wert dieser Eigenschaft in der Anwendungskonfiguration wie folgt anpassen:
return [ // ... 'defaultRoute' => 'main/index', ];
catchAll-Route (vollständige Abfangroute)
Manchmal möchten Sie Ihre Die Webanwendung wird vorübergehend in den Wartungsmodus versetzt und bei allen Anfragen wird dieselbe Informationsseite angezeigt. Natürlich gibt es viele Möglichkeiten, dies zu erreichen. Der einfachste und schnellste Weg besteht darin, das Attribut yiiwebApplication::catchAll in der Anwendungskonfiguration festzulegen: Das Attribut
return [ // ... 'catchAll' => ['site/offline'], ];
catchAll muss in einem Array als Parameter übergeben werden. Das erste Element des Arrays ist die Route. und die übrigen Elemente unten spezifizieren (in Form von Name-Wert-Paaren) die verschiedenen Parameter, die an die Operation gebunden sind.
Wenn das Attribut „catchAll“ festgelegt ist, ersetzt es alle Routen, die aus der eingehenden Anfrage geparst werden. Bei diesem Setup wird für die Bearbeitung aller eingehenden Anfragen dieselbe Site/Offline-Aktion verwendet.
Aktion erstellen
Sobald die Anforderungsroute festgelegt ist, besteht der nächste Schritt darin, ein „Aktions“-Objekt zu erstellen, um auf die Route zu reagieren.
Routen können mithilfe der darin enthaltenen Schrägstriche in mehrere Komponentenfragmente aufgeteilt werden. Beispielsweise kann Site/Index in zwei Teile zerlegt werden: Site und Index. Jedes Fragment ist eine ID, die auf ein Modul, einen Controller oder eine Aktion verweist.
Ausgehend vom ersten Fragment der Route durchläuft die Anwendung den folgenden Prozess, um Module (falls vorhanden), Controller und Operationen zu erstellen:
Legen Sie die fest Anwendungstext zum aktuellen Modul.
Überprüfen Sie, ob die yiibaseModule::controllerMap des aktuellen Moduls die aktuelle ID enthält. Wenn dies der Fall ist, wird basierend auf der Konfiguration in der Tabelle ein Controller-Objekt erstellt und dann mit Schritt fünf fortgefahren, um nachfolgende Fragmente der Route auszuführen.
Überprüfen Sie, ob die ID auf ein Modul in der Modulliste im Attribut yiibaseModule::modules des aktuellen Moduls verweist. Wenn dies der Fall ist, wird ein Modulobjekt basierend auf der Konfiguration in der Modultabelle erstellt und dann wird das neu erstellte Modul als Umgebung verwendet, um zu Schritt zwei zurückzukehren und die nächste Route zu analysieren.
Behandeln Sie diese ID als Controller-ID und erstellen Sie ein Controller-Objekt. Verwenden Sie den nächsten Schritt, um die verbleibenden Fragmente in der Route zu analysieren.
Der Controller sucht in seinem yiibaseController::actions() nach der aktuellen ID. Wenn es gefunden wird, erstellt es ein Aktionsobjekt basierend auf der Konfiguration in der Zuordnungstabelle. Andernfalls versucht der Controller, eine Inline-Aktion zu erstellen, die der ID entspricht und durch eine Aktionsmethode definiert wird.
Wenn in den obigen Schritten ein Fehler auftritt, wird yiiwebNotFoundHttpException ausgelöst, was darauf hinweist, dass der Routing-Startvorgang fehlgeschlagen ist.
Verwandte Empfehlungen:
Yii2 Code für den automatischen Lademechanismus in
So laden Sie die mit Yii gelieferte Bestätigungscode-Funktion
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Yii-Betriebsmechanismus und der Routing-Funktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!