Heim >PHP-Framework >Denken Sie an PHP >ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen

咔咔
咔咔Original
2020-12-01 12:27:202045Durchsuche
"

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.

"

Vorwort

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.

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
Framework-Ausführungsprozess

1. Routing-Merge-Gruppierungsparameter erkennen, Gruppenrouting überprüfen

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.

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
Ausführungsort

Um den Ausführungsprozess deutlich darzustellen, hat Kaka den Ausführungsprozess eingekreist.

Ausführungsdatei:

  1. 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);
  2. thinkphp/library/think/Route.php -> $result = $domain->check($this->request, $url, $completeMatch);
  3. thinkphp/library/think/route/Domain.php -> $result = $this->checkRouteAlias($request, $url); -> return parent::check($request, $url, $completeMatch);
  4. 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.

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmenErgebnisse drucken

Dann geben Sie mergeGroupOptions Die Methode ist ausführlich erklärt.
  • Ausgeführte Datei: thinkphp/library/think/route/RuleGroup.php 164 Zeilen
  • $this->parent: class thinkrouteDomain
  • Routing-Parameterdefinition abrufen, wenn der Routing-Parameter nicht vorhanden ist, es ist 'merge_rule_regex ' => bool(false), Routing-Parameter werden trotzdem angehängt
  • Gruppierungsparameter zusammenführen: $this->mergeOptions: Routing-Parameter 'after', 'model', 'header', die sein müssen mit der Gruppierung 'response', 'append', 'middleware' zusammengeführt
  • Parameter über array_merge zusammenführen
  • und den lockOption-Parameter sperren
  • und das zusammengeführte Ergebnis zurückgeben und schließlich das Ergebnis $this zurückgeben -> Option

Siehe das Bild unten für das RückgabeergebnisThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen

Rückgabeergebnis
ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
In der letzten Analyse geht es darum, die Routing-Parameter für die offiziell unterstützten Routing-Parameter zusammenzuführen Bitte beachten Sie das Bild unten.
Normalerweise verwenden wir keine Routing-Parameter. Wir erwähnen sie hier nur, um alle darüber zu informieren, dass sie vorhanden sind. Wenn Sie darauf bestehen, sie zu verwenden, überprüfen Sie unbedingt die Versionsnummer, da Sie sonst auf große Probleme stoßen.

Unterstützte Routing-Parameter
ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
Gruppenrouting prüfen

Datei: thinkphp/library/think/route/RuleGroup.php Zeile 183.

Hier müssen wir zunächst klären, welchen Wert die Variable $rules hat.

Paketrouting erkennen
ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
Wenn wir den Wert von $rules ausdrucken, können wir sehen, dass es zwei Situationen gibt.

Der erste Fall ist kein Ressourcenrouting.

Der zweite Fall ist das Ressourcenrouting.

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
$rules value

Das liegt daran, dass Kaka nur zwei Routen in der Routing-Datei festlegt, eine Ressourcenroute und eine Nicht-Ressourcenroute.

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
Routing-Konfigurationsdatei

Anhand der im Bild oben eingekreisten Daten können Sie erkennen, dass der Wert von $item in zwei Situationen aufgeteilt wird, wenn die Schleife ausgeführt wird.

  • 执行thinkrouteRuleItem Object中的check方法

根据神器的打印结果可以看到当为资源路由时 也是执行的thinkphp/library/think/route/RuleGroup.php

Artifact Print

Warum das Ressourcenrouting die Prüfung von thinkphp/library/think/route/RuleGroup.php ausführt

🎜Weil die Resource-Klasse die RuleGroup-Klasse erbt. 🎜

AndDer Wert von $item ist $item

的值是Resource类的实例,所以会进行执行check方法。

所以说拥有神器是多么的重要,关于这个神器在之前的文章进行过深入的讲解如何使用,如果你还不会,或者不知道这个用法赶紧去看看哈!神器是可以直接打印出代码的执行流程,在调试源码的过程中是非常有用的。

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
继承关系

经过再一次的执行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.
ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmenThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
Vererbungsbeziehung

Nach einer weiteren Ausführung

Routengruppierung erkennen

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
Überprüfung der Ausführung von Routen ohne Ressourcen

Datei: thinkphp/library/think/route/RuleItem.php Zeilennummer 231 Dies ist die Methode für die Ausführung von Routen ohne Ressourcen.

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
Methode zum Ausführen von Nicht-Ressourcen-Routing

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. 🎜
ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
Routing-Parameter zusammenführen

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.

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
Ausführungsprozess
ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
Ausführungsprozess

Als nächstes müssen Sie analysieren und feststellen, ob die URL und das Regelrouting übereinstimmen.

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
Überprüfen Sie, 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.

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
Inhalt drucken
ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
Ergebnisse drucken

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.

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
Routing-Konfigurationsdatei

Fügen Sie zu diesem Zeitpunkt eine Routing-Adresse zur Routing-Konfigurationsdatei hinzu.

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
Routing-Konfigurationsdatei

Dann drucken Sie die Ergebnisse am Anfang des Artikels aus.

Gibt es hier eine Frage, warum wird false zurückgegeben?

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
Überprüfen Sie, ob die URL und die Regelroute übereinstimmen, und drucken Sie die Ergebnisse aus.

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.

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
Der Quellpunkt des Ausführungsprozesses

Es ist sehr klar, dass Sie wissen, dass die Datei ausgeführt werden mussthinkphp/library/think/route/RuleItem.php中的checkund zurückgegeben werden muss.

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
Routing erkennen

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.

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
Beziehungen basierend auf Code finden

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.

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
Geparster Quellcode

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) "/"

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
合并路由规则

在接着对路由规则进行处理,将所有的|改为/

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
对路由规则进行处理

根据上图给返回的$rule可以明确的一件事就是下边的判断不会执行。

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen
判断不会执行

在这里需要了解一个方法就是preg_quote:函数用于转义正则表达式字符

所以最后这个slash这个变量会返回为string(6) "/-/"

ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen🎜Routing-Regeln zusammenführen🎜🎜🎜Verarbeiten Sie dann die Routing-Regeln und ändern Sie alle | in /🎜🎜ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen🎜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. 🎜🎜ThinkPHP erkennt, ob URL-Variablen und Regelrouting übereinstimmen🎜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!

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