Heim >PHP-Framework >Denken Sie an PHP >ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
"In diesem Artikel wird weiterhin der Routing-Quellcode erläutert. Wenn Sie diesen Artikel sehen, können Sie die zuvor geschriebenen Routing-Artikel lesen, es gibt insgesamt zwei Artikel.
"
Nach der Interpretation des Routing-Quellcodes in den ersten beiden Artikeln glaube ich, dass jeder ein gewisses Verständnis für Routing hat.
In diesem Artikel wird weiterhin die Analyse des ThinkPHP-Routing-Quellcodes erläutert. Dies ist auch das Ende des Routing-Inhalts. Später wird es einen Artikel über Routing-Planung geben.
In Bezug auf das Routing ist Kaka der Ansicht, dass dies der schwierigste Kernpunkt beim Lesen des Quellcodes im gesamten Framework ist und auch viel Zeit in Anspruch nimmt.
Da es viele verschachtelte Klassen darin gibt, warum nicht dem gesunden Menschenverstand folgen, wie zum Beispiel diesem Punkt von $this->group.
Obwohl es sich um eine einfache Aufrufbeziehung handelt, werden im Quellcode viele Funktionen ausgeführt.
Der allgemeine Quellcode geht davon aus, dass es sich bei dieser Gruppe um eine einfache Klasse handelt. Das zurückgegebene Endergebnis ist etwas überraschend.
Daher muss alles über das Framework sorgfältig verstanden werden. Das Lesen des Quellcodes dient hauptsächlich dazu, Ihr Verständnis des Frameworks und seiner Designideen zu verbessern.
Befolgen Sie weiterhin die Schritte. Schauen Sie sich zunächst das Ausführungsflussdiagramm der Bergbaumaschine an. Anschließend können Sie den Artikel anhand des Flussdiagramms klar lesen.
Alle Quellcode-Lesungen in der späteren Zeit werden zur Ergänzung direkt hier hinzugefügt.
Im letzten Teil des vorherigen Artikels wurde über den Standort im Bild unten gesprochen vorerst Dies Die leere Position ist der als nächstes zu besprechende Zusammenführungsgruppierungsparameter.
Parameterzusammenführung bedeutet eigentlich, Routing-Parameter und Standardparameter zusammenzuführen.
Um den Ausführungsprozess deutlich darzustellen, hat Kaka den Ausführungsprozess eingekreist.
Ausführungsdatei:
thinkphp/library/think/App.php -> <code style="font-size: 14px; Zeilenumbruch: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; background-color: rgba(27,31,35,.05) ;Schriftfamilie: Operator Mono, Consolas, Monaco, Monospace; Word-Break: Break-All; ($path, $must);
$dispatch = $this->route->check($path, $must);
thinkphp/library/think/Route.php
-> $result = $domain->check($this->request, $url, $completeMatch);
thinkphp/library/think/route/Domain.php
-> $result = $this->checkRouteAlias($request, $url);
-> return parent::check($request, $url, $completeMatch);
thinkphp/library/think/route/RuleGroup.php
-> $this->mergeGroupOptions();
thinkphp/library/think/Route.php
-> 🎜🎜thinkphp/library/think/route/Domain.php
-> Sie können erkennen, dass es sich um die instanziierte Klasse von Domain handelt, indem Sie sie mit debug_backtrace() drucken. Ergebnisse drucken
Dann geben Sie mergeGroupOptions
Die Methode ist ausführlich erklärt.
的值是Resource
类的实例,所以会进行执行check方法。所以说拥有神器是多么的重要,关于这个神器在之前的文章进行过深入的讲解如何使用,如果你还不会,或者不知道这个用法赶紧去看看哈!神器是可以直接打印出代码的执行流程,在调试源码的过程中是非常有用的。
经过再一次的执行check
Wie wichtig es ist, ein Artefakt zu haben? Der vorherige Artikel hat eine ausführliche Erklärung zur Verwendung dieses Artefakts gegeben, wenn Sie noch nicht wissen, wie man es verwendet , geh und schau es dir an! Das Artefakt kann den Ausführungsfluss des Codes direkt ausdrucken, was beim Debuggen des Quellcodes sehr nützlich ist. Nach einer weiteren Ausführung
Routengruppierung erkennen
Datei: thinkphp/library/think/route/RuleItem.php Zeilennummer 231 Dies ist die Methode für die Ausführung von Routen ohne Ressourcen.
Nach Eingabe der Routing-Regelerkennungsmethode werden die Routing-Parameter weiterhin zusammengeführt.
🎜🎜🎜Erkennen von Routen🎜🎜🎜Die Methode zum Zusammenführen von Routing-Parametern wurde oben erwähnt, daher werde ich hier nicht auf Details eingehen. 🎜Bis jetzt haben wir uns mit dem Zusammenführen von Gruppenparametern und der Überprüfung des Gruppen-Routings unter Erkennungs-Routing befasst. Wenn Sie sich über die Idee nicht im Klaren sind, können Sie sich die Mindmap ansehen.
2. Überprüfen Sie, ob die URL-Variablen und das Regelrouting übereinstimmen.
Die folgenden Fälle verwenden normales Routing. Es gibt keine Fälle, in denen Ressourcenrouting verwendet wird. thinkphp/library/think/route/RuleItem.php
Verwenden Sie ein Artefakt, um die Daten zu drucken.
Als nächstes müssen Sie analysieren und feststellen, ob die URL und das Regelrouting übereinstimmen.
Bevor wir mit dem Inhalt hier beginnen, lösen wir ein Problem mit Kaka.
Gehen Sie zur oberen Ebene des obigen Codes und drucken Sie das Rückgabeergebnis aus.
Dann schauen Sie sich die Routing-Konfigurationsdatei route.php an.
In dieser Datei konfiguriert Kaka nur zwei Routing-Adressen, von denen nur eine eine Ressourcenroute ist, und hat variable Regeln eingerichtet.
Fügen Sie zu diesem Zeitpunkt eine Routing-Adresse zur Routing-Konfigurationsdatei hinzu.
Dann drucken Sie die Ergebnisse am Anfang des Artikels aus.
Gibt es hier eine Frage, warum wird false zurückgegeben?
Um herauszufinden, warum die Überprüfung, ob die URL und die Regelroute übereinstimmen, „Falsch“ zurückgibt.
Dann müssen Sie zur Überprüfung zum Quellpunkt gehen.
Der Inhalt dieses Abschnitts wurde oben erläutert. Es gibt zwei Situationen für die Elemente hier. Die erste ist 执行thinkrouteResource Object
,第二种为执行thinkrouteRuleItem Object
.
führt alle die Prüfmethode aus.
Es ist sehr klar, dass Sie wissen, dass die Datei ausgeführt werden mussthinkphp/library/think/route/RuleItem.php
中的check
und zurückgegeben werden muss.
Anhand dieser beiden Codezeilen können Sie verstehen, dass die Variable $match verknüpft sein muss.
Diese Variable wird verwendet, um zu erkennen, ob die URL und das Regelrouting übereinstimmen. Dies ist eine Rückkehr zu dem, was wir am Anfang gesagt haben.
Der Quellcode sieht also so aus, Link für Link. Lesen Sie ihn einfach langsam und Sie werden ihn verstehen, nachdem Sie mehr gelesen haben.
Offiziell mit dem Parsen des Codes beginnen
Parameterbeschreibung
$URL: Zugriffsadresse
$Option: Gruppierungsparameter zusammenführen
-
$completeMatch : Ist Ist das Routing abgeschlossen? Übereinstimmung
Ausführungsdatei: Datei: thinkphp/library/think/route/RuleItem.php
Gehen wir näher auf die spezifische Implementierung ein.
Zunächst wird beurteilt, ob das Routing vollständig übereinstimmt. Später wird Kaka einen separaten Artikel veröffentlichen, um zu erklären, warum das Urteil ist nötig.
Dann wird der Code ausgeführt, um die Routing-Regeln zusammenzuführen. Dieser Prozess führt die Routing-Regeln zusammen.
Kommen Sie zur Methode getPattern, da die Routing-Regel nicht festgelegt ist. Der Anfangswert dieser Variablen der Routing-Regel ist ein leeres Array, sodass es sich nach dem Zusammenführen immer noch um ein leeres Array handelt.
Ich weiß nicht, ob Sie irgendwelche Zweifel an der zweiten Codezeile haben werden, was genau ausgeführt wird.
Abhängigkeitsinjektion wird im Konstruktor dieser Klasse durchgeführt, um die // Routing-Instanz zu injizieren: thinkRoute.
Laut Codeverfolgung werden die Konfigurationsinformationen aus den Konfigurationsinformationen abgerufen. Das zurückgegebene Ergebnis ist string(1) "/"
string(1) "/"
在接着对路由规则进行处理,将所有的|改为/
根据上图给返回的$rule可以明确的一件事就是下边的判断不会执行。
在这里需要了解一个方法就是preg_quote:函数用于转义正则表达式字符
所以最后这个slash这个变量会返回为string(6) "/-/"
🎜Routing-Regeln zusammenführen🎜🎜🎜Verarbeiten Sie dann die Routing-Regeln und ändern Sie alle | in /🎜🎜🎜Verarbeiten Sie die Routing-Regeln🎜🎜🎜Gemäß der im obigen Bild zurückgegebenen $rule, Es kann klar verstanden werden. Eine Sache ist, dass das folgende Urteil nicht vollstreckt wird. 🎜🎜🎜Kein Urteil Es wird ausgeführt🎜🎜🎜Eine Methode, die Sie hier kennen müssen, ist preg_quote: Die Funktion wird verwendet, um reguläre Ausdruckszeichen zu maskieren🎜🎜Die letzte Schrägstrichvariable wird also zu string(6) "/-/"
, alle Backslashes sind Escape-Zeichen. 🎜Die Funktion preg_replace trennt Zeichenfolgen durch einen regulären Ausdruck. Die Funktion
strncasecmp() vergleicht zwei Zeichenfolgen (ohne Berücksichtigung der Groß- und Kleinschreibung). Die Funktion
preg_match_all wird verwendet, um einen globalen regulären Ausdrucksabgleich durchzuführen. Die Funktion
preg_match_all wird verwendet, um einen globalen Abgleich regulärer Ausdrücke durchzuführen.
Es gibt mehrere Funktionen dieser Methode, die den meisten Menschen sehr unbekannt sind. Sie können die Informationen nur selbst überprüfen, und Kaka wird die Verwendung dieser Methoden nicht erklären.
Zusammenfassung
Das Obige ist der Inhalt der Erkennung, ob die URL-Variable und die Regelroute übereinstimmen. Die Funktionen dieses Blocks umfassen hauptsächlich die folgenden Aspekte.
Um zu überprüfen, ob die Route vollständig übereinstimmt, wird als Parameter Complete_match verwendet.
Routing-Regeln zusammenführen, also Muster verwenden.
Das Wichtigste ist, dass der nächste Teil verschiedene Funktionen an der Adresse behandelt.
Die endgültige Rückgabe erfolgt in Form einer Reihe von Routing-Parametern.
Das Obige ist der Fall, wenn Routing-Parameter vorhanden sind. Wenn keine Routing-Parameter vorhanden sind, wird false direkt zurückgegeben.
Dann gehen Sie zurück und führen Sie hier das Parsen des übereinstimmenden Regelroutings durch.
Kaka lässt das Flussdiagramm hier nicht aus. Sie können es mit dem von Kaka bereitgestellten Code-Debugging-Tool debuggen oder sich die oben von Kaka bereitgestellte Anleitung ansehen.
Der letzte Teil des Inhalts ist die Routing-Planung, wie das Routing geplant wird und an wen die endgültigen Routing-Ausführungsergebnisse zurückgegeben werden Die Terminplanung wird detailliert analysiert.
Dieser Artikel konzentriert sich hauptsächlich auf die Erkennung von Routing-Parametern, Routing-Variablen und Regeln. Dieser Inhalt muss zusammen mit den vorherigen Artikeln gelesen werden. Es gibt serialisierte Artikel auf der chinesischen PHP-Webseite und schaut es euch an!
„Beharrlichkeit beim Lernen, Beharrlichkeit beim Bloggen und Beharrlichkeit beim Teilen sind die Überzeugungen, die Kaka seit seiner Karriere vertritt. Ich hoffe, dass Kakas Artikel im riesigen Internet Ihnen ein wenig helfen können Kaka, wir sehen uns in der nächsten Ausgabe.
“
Das obige ist der detaillierte Inhalt vonThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!