Heim >PHP-Framework >Denken Sie an PHP >ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse

咔咔
咔咔Original
2020-12-01 12:01:464244Durchsuche
"

Routing ist ein wichtiger Teil der Projektentwicklung. Jedes Projekt verwendet Routing zum Verwalten von Schnittstellen. Als Nächstes lernen Sie in diesem Artikel das Routing aus dem Quellcode.

"

一, Routing-Parameter und variable Regeln

Derselbe Code beginnt hier, aber dieses Mal liegt der Schwerpunkt auf Routing-Parametern und variablen Regeln.

Diese beiden Punkte dienen nur dazu, kurz die Verwendung und den einfachen Ausführungsprozess zu erläutern.

Für ein tieferes Verständnis werde ich es nicht erklären, da diese beiden Punkte im üblichen Entwicklungsprozess nicht oft verwendet werden.

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Routing-Regeln registrieren

Denken Sie daran, dass wir oben die Verwendung von Routing-Parametern in der Datei gesehen haben thinkphp/library/think/route/RuleItem.php!

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Über die Verarbeitung von Routing-Parametern

Und das Dokument enthält auch viele unterstützte Parameter, wie unten gezeigt.

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Vom Dokument unterstützte Parameter

So verwenden Sie diesen Routing-Parameter!

Verwenden Sie dann die Route, die wir zuvor verwendet haben, und richten Sie die URL-Suffix-Erkennung ein, um den Abgleich mehrerer Suffixe zu unterstützen.

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Routing-Fall

Wie sollen wir also auf die von uns eingerichtete Route zugreifen?

Wenn Sie nach den normalen Routing-Regeln zugreifen, wird ein Fehler gemeldet. Bitte lesen Sie weiter, um die richtige Zugriffsmethode zu erfahren.

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Zugriffsergebnisse

Die korrekte Anforderungsadresse sollte http://www.source.com/index.php/hello/1.html sein, das heißt, das von uns festgelegte Suffix-HTML muss mit der Anforderungsadresse verbunden werden.

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Zugriffsergebnisse

Der spezifische Ausführungsprozess dieses Blocks kann einfach mit dem Code-Tracker betrachtet werden. Kaka wird ihn hier nicht demonstrieren.

In Bezug auf die Routing-Parameter zeigt Ihnen Kaka hier einen Fall, und es ist im Grunde genommen vorbei.

Globale Routing-Parameter

Das letzte, was in diesem Routing-Parameter-Abschnitt erklärt wird, sind die globalen Routing-Parameter.

Gehen Sie direkt zum Dokument, um es anzuzeigen.

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Globale Routing-Parameter

Hier richtet Kaka zwei Routing-Regeln zum Testen ein, ein Parameter ist optional und einer erforderlich, und die Routing-Regeln werden so eingestellt, dass Dateisuffixe hinzugefügt werden.

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Routing-Datei

Die Anforderungsadresse beim Übergeben von Parametern.

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Zugriff auf Ergebnisse

Adresse anfordern, ohne Parameter zu übergeben.

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Zugriffsergebnisse

Das Obige ist, was für die Routing-Parameter geschrieben wurde.

Es gibt keine besonders ausführliche Erklärung. Es wird im Grunde erklärt, wie man es benutzt. Dieses Ding existiert also.

Variable Regeln

Die gleichen variablen Regeln, diese sind in Kakas täglicher Entwicklungsarbeit noch weniger verfügbar.

Variable Regeln KaKa glaubt, dass der einzige Vorteil darin besteht, Parameter zu filtern.

Das heißt, variable Regeln sind Verhaltensweisen, die nur existieren, wenn Routing-Regeln Parameter haben.

Kaka stellt dir hier einen einfachen Fall zur Verfügung.

Demo-Hülle

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Routing-Datei-Demonstrationsfall

Parameter nach der Route anhängenpattern

Dann schauen wir uns an, wie diese Anfrage geschrieben wird.

Die eingehenden Parameter können ausgegeben werden, wenn es sich bei den Parametern um Zahlen handelt.

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Erste Abfrage der Adresse

Bei der Eingabe von Buchstaben wird jedoch ein Fehler gemeldet.

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Ergebnisse drucken

Die Variablenregel besteht also darin, die Parameter nach der Routing-Regel zu filtern, die mithilfe regulärer Ausdrücke verarbeitet wird.

Bis hierhin werden hier lediglich die Routing-Parameter und Variablenregeln genannt.

Obwohl der Inhalt sehr einfach ist, handelt es sich bei den meisten davon um Anwendungsfälle zur Einführung in die Verwendung, und es gibt keine eingehende Untersuchung des Quellcodes.

Erstens verwende ich es während der täglichen Entwicklung selten.

Zweitens müssen wir es im folgenden Artikel weiter verstehen. Hier ist nur ein allgemeines Verständnis.

Eigentlich wird geschätzt, dass viele Menschen immer noch nicht verstehen, warum der interne Inhalt bei der Eingabe der Routing-Adresse angezeigt werden kann. Wir werden später ein detailliertes Verständnis dafür haben.

2. Ressourcenrouting

Die Einstellung des Ressourcenroutings ist ebenfalls sehr einfach.

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Dateien weiterleiten

Es ist auch bequemer, die Befehlszeile zum Erstellen von Dateien zu verwenden.

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Verwenden Sie Befehle zum Erstellen von Dateien

Der erstellte Controller selbst ist eine Ressourcenroutingdatei.

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Resource Routing Controller

Dann wird weiterhin die Ressourcenmethode der Route-Datei ausgeführt.

Diese Methode verfügt außerdem über Routing-Regeln, Routing-Adressen, Routing-Parameter und variable Regeln.

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Ressourcenrouting registrieren

Dann kommen Sie zur thinkphp/library/think/route/Resource.phpKlasse

Führen Sie in dieser Klasse rechtzeitig einige einfache Attributzuweisungen durch.

Dann ist da noch der von Kaka eingekreiste Ort. Als nächstes erklärt Kaka den eingekreisten Ort.

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
thinkphp/library/think/route/Resource.php

Da die Ressourcenklasse die RuleGroup-Klasse erbt, springt sie zur Klasse thinkphp/library/think/route/RuleGroup.php.

Kommen Sie zu der Aktion, die mit dieser Methode ausgeführt wird.

  • verarbeitet einfach die Routing-Regeln. Wenn die Route Parameter enthält, müssen die Routing-Regeln in blog/<name> oder blog/<name></name></name>blog/<name> 或者 blog/<name></name></name>
  • 接着就是对$this->parent解释,这里为什么是object(thinkrouteDomain)
  • Als nächstes folgt die Erklärung von $this->parent, warum das so ist object(thinkrouteDomain), Sie müssen weiterleiten Der erste Abschnitt des Artikels 3 dieses Artikels und der vollständige Name werden in diesem Schritt zugewiesen.
Der letzte Schritt besteht darin, den Wert fullName zuzuweisen. Tatsächlich besteht er darin, die Routing-Regel fullName zuzuweisen.
ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse

Legen Sie die Routing-Regeln für die Gruppe fest.

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse Gehen Sie dann zurück zur oberen Ebene, um das Nächste zu sehen.

Kehren Sie zur oberen Datei zurück und lesen Sie den Quellcode weiter

  • Nachdem Sie die Routing-Regeln der Gruppe festgelegt haben, müssen Sie einigen Attributen Werte zuweisen, hauptsächlich den folgenden drei.
  • Routing-Variablenregeln
  • Routing-Parameter
REST-Routing-Methodendefinition

Zur Attributzuweisung gibt es nichts zu sagen, Sie müssen nur verstehen, was das entsprechende Attribut bewirkt.

Der nächste Schritt besteht darin, die Anforderungsmethode als Schlüsselwert und $this als Wert zu verwenden, um eine Instanz dieser Klasse zurückzugeben, und zu prüfen, ob es sich bei dieser Routing-Methode um ein Annotations-Routing handelt.
ThinkPHP-Routing-Parameter und Ressourcen-Routing-AnalyseDas zurückgegebene Ergebnis wird ausgedruckt, damit jeder es sich kurz ansehen kann. Der Inhalt wurde nicht abgefangen, Sie müssen also nur wissen, wie hoch der Wert ist.

Ergebnis zurückgeben

🎜🎜Nach der obigen Ausführung kehrt es zur oberen Ebene zurück, um die Lazy-Methode auszuführen🎜

Wissen Sie zunächst, was der übergebene Parameter ist: ob die Route beim Parsen verzögert wird

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Nachdem der Code ausgeführt wurde, kehrt er zur oberen Ebene zurück

Dann gelangen Sie zur Lazy-Methode

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Lazy-Methode

In dieser Methode rufen Sie parseGroupRule auf, und der übergebene Parameter ist die Routing-Regel der Gruppe. In diesem Abschnitt geht es um die Routing-Gruppierung, daher werden wir hier nicht darauf eingehen.

GruppenroutingregelnThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Bis zu diesem Punkt werde ich kurz auf das Ressourcenrouting eingehen

Abschließend wird Kaka die Ausführungs-Mindmap für alle zeichnen

Ressourcengrund-AusführungsprozessThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse

Tatsächlich gibt es im vorherigen Abschnitt eine Codezeile wie diese

$this->parent->getDomain()Gemäß dem Namen der Methode wissen wir, dass diese Codezeile dazu dient, das zu erhalten gewünschter Domainname

Aber jeder weiß, wo dieser Domainname steht?

Wenn Sie diese Ressourcenroute anfordern, wird der Konstruktor der Route-Klasse ausgeführt

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Ressourcenrouting

Es gibt eine solche Codezeile im Konstruktor, die den angeforderten Domänennamen abrufen soll

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Der Konstruktor

kommt zur Host-Methode

In der Host-Methode dies Parameter ist wahr

Hier müssen Sie nur aufpassen$this->server('HTTP_HOST')即可,就是用来获取域名地址的

在咔咔圈出来的第二处可以看到,第一个条件是成立的,但是第二个条件是不成立的

所以会直接返回上一步获取出来的$this->host

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
host方法

打印$this->host,这里为什么会执行俩次就不对此解释了,有疑问的可以使用函数debug_backtrace

Sie können an der zweiten von Kaka eingekreisten Stelle sehen, dass die erste Bedingung erfüllt ist, die zweite Bedingung jedoch nicht erfüllt ist
ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse Daher wird direkt zum $this-> ;host
ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Host-Methode

Drucken$this- >host, ich werde nicht erklären, warum es zweimal ausgeführt wird. Wenn Sie Fragen haben, können Sie die Funktion debug_backtrace zum Anzeigen.

🎜🎜🎜Drucken Sie das Ergebnis aus🎜🎜🎜Dann wird die Methode zum Initialisieren des Standarddomänennamens ausgeführt🎜🎜Das heißt, der Domänenname wird hier initialisiert🎜
ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Initialisieren Sie die Standardmethode für Domänennamen

Zu diesem Zeitpunkt wird es noch Fragen geben, da es sich eindeutig um thinkphp/library/think/route/Resource.phpEs wird in dieser Klasse ausgeführt! thinkphp/library/think/route/Resource.php这个类里边执行的啊!

设置域名地址是在thinkphp/library/think/Route.php

Legen Sie die Domainnamenadresse fest in

ThinkPHP-Routing-Parameter und Ressourcen-Routing-AnalyseInitialisierungsanwendung
Kommen Sie zur Initialisierungsanwendung und sehen Sie sich die Routeninitialisierung an. hier Die Beurteilung basiert auf der Array-Konfiguration in der Routing-Konfigurationsdatei.

ThinkPHP-Routing-Parameter und Ressourcen-Routing-AnalyseRouting-Konfiguration importieren
An diesem Punkt sollten Sie ein gewisses Verständnis dafür haben, wann die Routing-Konfiguration geladen wird.

Aber im Dokument wird die Konfiguration des Routings im Array-Modus nicht erwähnt, was bedeutet, dass es keinen Anwendungsfall gibt.

Also müssen wir import这个方法进行追踪。

直接找到使用方法即可。

这里关于$this->route->import($rules);这行代码,咔咔在做一次解释。

其实也就是$this->route为什么可以执行到Route类。

首先我们需要先知道的就是App类是继承这Container类的

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
继承关系

然后在Container类的最后存在几个魔术方法。

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Container魔术方法

当App中调用不存在的Route类时就会执行这个__get这个魔术方法。

然后就会执行__get魔术方法中的make方法。

关于这个方法,咔咔说过了不下三次了,可以去看容器那一篇文章哈!

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
容器类中的make方法

接着继续我们的行军之路,来到thinkphp/library/think/Route.php的导入配置文件的路由规则,方法import

Finden Sie einfach heraus, wie Sie es verwenden. 🎜🎜Hier ungefähr$this->route-> import($rules);Kaka erklärt diese Codezeile. 🎜🎜Tatsächlich ist es Vererbungsbeziehung🎜 Dann gibt es am Ende der Container-Klasse mehrere magische Methoden. 🎜
Container Magic Method🎜Wenn die nicht vorhandene Route-Klasse in der App aufgerufen wird, wird die magische Methode __get ausgeführt. 🎜🎜Dann wird die make-Methode in der __get magic-Methode ausgeführt. 🎜🎜 Zu dieser Methode hat Kaka es nicht weniger als dreimal gesagt. Sie können den Artikel über Container lesen! 🎜
ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
in der Containerklasse make Methode
🎜Dann setzen wir unseren Marsch fort und kommen zu thinkphp/library/think/Route.php importiert die Routing-Regeln der Konfigurationsdatei, Methodeimportieren🎜

In dieser Methode können Sie mehrere bekannte Variablenregeln sehen.

Dann verwenden Sie diese Werte für einen kurzen Test Wenn das Routing erläutert wird, verwenden Sie die Option „Ressourcen-Routing prüfen“ als Testbedingung. Stellen Sie sicher, dass die zuvor festgelegte Ressourcen-Routing-Konfiguration deaktiviert ist. Andernfalls ist der Test der Routing-Konfigurationsdatei nicht möglich. Diesmal ist ein Besuch erforderlich. Ja. Das ist alles, es ist so einfach zu verwenden die Routing-Regeln zur Ressourcenmethode

ThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
Die Ausführung von Ressourcen

ist auch die gleiche Ausführungsmethode

RessourcenmethodeThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse
In diesem Abschnitt wird kurz darauf eingegangen, hauptsächlich weil ein gewisser Bedarf an Routen besteht Initialisierung Verstehen

und lernen, die Routing-Array-Konfiguration zu verwenden

Diese Methode wird in der Vorgängerversion 5.1 oder der veröffentlichten Version 6.0 nicht oft verwendet, man kann auch sagen, dass sie überhaupt nicht verwendet wird

Ich erwähne es hier nur, um den Routing-Initialisierungsprozess zu überprüfen und zu wissen, wozu das Array-Konfigurations-Routing dient

Wenn Sie Fragen haben, sollten Sie diese lösen, anstatt sie ungelöst zu lassen

Das obige ist der detaillierte Inhalt vonThinkPHP-Routing-Parameter und Ressourcen-Routing-Analyse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn