Heim > PHP-Framework > Denken Sie an PHP > ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse

ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse

咔咔
Freigeben: 2020-12-01 13:41:01
Original
2118 Leute haben es durchsucht

Vorwort

Aufgrund der Länge des Artikels werde ich ihn in einem neuen Artikel schreiben.

Im vorherigen Artikel habe ich Ihnen die folgenden Inhalte erklärt.

  • Eine einfache Analyse des anfänglichen Verständnisses von Routing
  • Lassen Sie uns über das Erscheinungsbild durch die Definition der Route sprechen
  • Was genau führt $this->group in der Routendefinitionsregelmethode aus?
  • Routing-Regelvorverarbeitung
  • Schneller Zugriff zum Parsen und Generieren von Routing-IDs

Aber es gibt noch viel zu erklären zum Routing, und der folgende Inhalt wird als nächstes analysiert.

  • Routenkonfiguration (d. h. in der Rückgabe in der Routendatei)
  • Dispatch zuerst getroffen
  • route-check erkennt URL-Routing
  • . . . . . . . . . . . . .

Das Folgende wird einzeln ausführlich erläutert.

Ich gebe Ihnen auch ein Ausführungsdiagramm zum Routing als Referenz.

ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
Ausführungsprozess des Routings

1. Erstes Verständnis des Versands und der Routenprüfung zur Erkennung des URL-Routings

Dieser Teil des Inhalts befindet sich in der Ausführungsanwendung Durch einen einfachen Prozess lernen Sie sich kennen.

In diesem Abschnitt gibt es keine Erklärung des Quellcodes, er dient nur dazu, den Weg für den Rest des Artikels zu ebnen, daher ist es notwendig zu wissen, worum es bei Dispatch geht.

Das Bild unten zeigt den Prozess der Rückkehr zur oberen Ebene, um die Ausführung nach der Routing-Initialisierung fortzusetzen.

Dann wird die Routing-Erkennung ausgeführt.

ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
Erstausführungsort des Versands

Der Routing-Test verwendet die folgende Abbildung

ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
Routing-Test-Anwendungsfall

Dann können wir diese Planungsinformationen drucken

ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
Daten drucken
ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
Ergebnisse drucken

Im obigen Bild wurden die relevanten Werte zum Versand ausgedruckt Es ist klar, dass der Cache in diesem Schritt verarbeitet wird und ein Dispatch-Objekt zurückgibt.

Sie können sich einfach den Quellcode dieses Stücks ansehen, er ist nicht sehr wichtig. routeCheck

route-check erkennt URL-RoutingThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
Aber Sie müssen sich diesen Inhalt noch kurz ansehen.

Bevor Sie es betrachten, müssen Sie klären, was die beiden übergebenen Parameter sind.

Parameter 1: Routing-Regeln Parameter zwei: Überprüfen Sie, ob obligatorisches Routing konfiguriert ist

ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
Ein Dispatch-Objekt zurückgeben

Nachdem Sie die Bedeutung der Parameter kennen, müssen Sie zur Prüfmethode gehen, um dies herauszufinden.

ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
URL-Routing erkennen

Bei dieser Methode zur automatischen Erkennung des Domainnamen-Routings drucken wir aus, wie die Daten aussehen.

Tatsächlich ist das zurückgegebene Ergebnis das gleiche wie bei der vorherigen Methode zum Mounten der Ressourcenroute.

ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
Drucken Sie das Ergebnis aus. Dann wird das Pfadinfo-Trennzeichen verwendet: Ändern Sie das / in der URL in |
und es wird konfiguriert werden Ob die Dateierfassungsroute vollständig übereinstimmt

Die endgültige Ausführung verwendet die Standardroutenanalyse

Die Details werden hier nicht eingehend analysiert. Es gibt zu viele Details zum Routing ist notwendig. Es kostet viel Zeit.

Das war's also mit diesem Stück, Sie müssen nur wissen, was ausgeführt wird und was am Ende zurückgegeben wird.

2. So finden Sie die Anforderungsklasse Im vorherigen Abschnitt führt diesen Teil des Inhalts aus.

Es ist uns egal, was diese Methode hier bewirkt. $result = $domain->check($this->request, $url, $completeMatch);

Aber Sie müssen sich darum kümmern$this->request, ob es gefunden und ausgeführt wird.

Das erste, was Sie sehen können, ist, dass das Anforderungsattribut in der Route-Klasse vorhanden ist.

ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
Fordern Sie die Eigenschaften des Objekts an

Dann kommen Sie zum Konstrukteur von Route, wo Sie eine neue Welt finden.

ArrayAccess wird hier verwendet, um wie ein Array auf das Objekt zuzugreifen, aber das Anforderungsattribut ist in $app nicht vorhanden, sodass die magische Methode __get in der Containerklasse ausgeführt wird. Die make-Methode im Container wird in der __get-Methode aufgerufen. Der erste Parameter ist „Anfrage“, und die Instanz der Anfrage wird schließlich zurückgegeben.

ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
Konstruktor

Die $app hier ist eigentlich die App-Instanz, die durch Abhängigkeitsinjektion eingeht.

Nachdem ich so viel Quellcode gelesen habe, muss ich wissen, dass die App-Klasse die Container-Klasse erbt, die die Container-Klasse ist.

Am Ende der Containerklasse gibt es mehrere magische Methoden.

Hier müssen Sie nur auf die __get-Methode achten.

ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
Magische Methode

__get-Methode ist eine Funktion, die ausgeführt wird, wenn auf eine nicht vorhandene Eigenschaft zugegriffen wird.

Das heißt, die make-Methode wird irgendwann ausgeführt.

ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
Die Make-Methode in der Containerklasse

Diese Methode durchläuft eine Reihe von Vorgängen und gibt schließlich eine Instanz von Request zurück.

Und speichern Sie diese Instanz im Container und holen Sie sie sich direkt, wenn Sie sie das nächste Mal verwenden.

Die Make-Methode in der Containerklasse ist eine besonders wichtige Methode in der Containerklasse und auch die Soul-Methode.

Instanzen des gesamten Frameworks werden über Container zurückgegeben, daher liegt die Bedeutung dieser Methode auf der Hand.

Kaka hatte zuvor ein sehr tiefes Verständnis von Containern und präsentierte es allen in Form von Artikeln.

3. Domainnamen-Routing erkennen

Lassen Sie mich zunächst den Prozess für Sie zeichnen und dann dem Rhythmus des Prozesses folgen.

ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
Ablaufdiagramm zur Erkennung von Routing-Domänennamen

Als Erstes muss bestätigt werden, dass die Routing-Erkennung von Domänennamen in der Ausführungsanwendung durchgeführt wird.

Im Ausführungsprozess der oberen Ebene befindet sich die Eingabedatei.

ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
Führen Sie die Anwendung aus

Zuerst wird der Code ausgeführt, um routeCheckSchauen Sie sich bei dieser Methode zuerst diese Datei an. routeCheck这个方法里边,那么就先看这个文件。

先看注释,对这个方法的解释就是URL路由检测。

在这个方法里边先是会对路由缓存进行检测,这块内容就是关于Cache的。

在这个方法里边最重要的的就是路由检测 返回一个Dispatch对象

Schauen Sie sich zuerst die Kommentare an. Die Erklärung dieser Methode ist die URL-Routing-Erkennung.
ThinkPHP erkennt das URL-Routing anhand einer eingehenden AnalyseBei dieser Methode wird zunächst der Routing-Cache erkannt. Bei diesem Inhalt geht es um den Cache.
Das Wichtigste bei dieser Methode ist Routenerkennung Dies -Methode gibt ein Dispatch-Objekt zurück.

🎜URL-Routing-Erkennung🎜🎜🎜Dann schauen wir uns diese Methode an. 🎜

Als Erstes muss geklärt werden, was die beiden übergebenen Parameter sind.

  • $path : string(4) "blog"
  • $must : bool(false)
ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
Routenerkennung

führt bei der URL-Routing-Erkennung die folgenden Schritte aus.

  • Pfadinfo-Trennzeichen: Ändern Sie das / in der URL in |
  • Ob die Route genau übereinstimmt?
  • Domänennamenroute erkennen
  • Standardroutenauflösung

Dann müssen Sie nur noch überprüfen der Domainname Eine eingehende Analyse des Routing-Prozesses.

Die ersten beiden Ausführungen sind nur einige String-Verarbeitungen. Werfen Sie einfach einen Blick darauf und wissen Sie, was am Ende zurückgegeben wird.

ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
URL-Routing erkennen

Klären Sie außerdem die Bedeutung der drei Parameter bei der Ausführung der Erkennung des Domainnamen-Routings.

  • $this->request: Durch die __get magic-Methode der Containerklasse wird die make-Methode der Containerklasse ausgeführt und schließlich wird das Instanzobjekt der Anforderung zurückgegeben. Diese Spalte ist nicht sichtbar第六节的文章
  • $url : string(4) "blog"
  • $completeMatch : 路由是否完全匹配

来到$result = $domain->check($this->request, $url, $completeMatch);

$completeMatch: Ob die Route vollständig übereinstimmt 🎜🎜🎜🎜 ergibt $result = $domain->check($this->request, $url, $completeMatch);Hier liegt der Schwerpunkt dieses Abschnitts. 🎜🎜Bei dieser Methode werden die folgenden Prozesse ausgeführt und wichtige Ausführungsprozesse eingehend analysiert. 🎜
  • Routing-Alias ​​erkennen: checkRouteAlias
  • URL-Bindung erkennen: checkUrlBind
  • Routing-Parameter beurteilen
  • Domänennamen-Middleware hinzufügen
  • Gruppen-Routing erkennen: parent::check
ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
Domainnamen-Routing erkennen

Routenalias erkennen: checkRouteAlias

Parametererklärung

  • $request: Instanz der Anforderungsklasse
  • $url: Blog bestanden

Diese Methode enthält zwei Kenntnisse Punkt, der geklärt werden muss

  • strpos: Finden Sie die Position, an der das erste Vorkommen im String
  • strstr: strstr gibt einen Zeiger zurück, der auf die Position zeigt, an der string2 zum ersten Mal in string1 erscheint, strstr("Helloworld!" , "world");?>nAusgabe: nworld!
  • Zuerst wird die URL-Adresse verarbeitet: Zurück zum Blog
  • , um die Alias-Routing-Definition NULL zu erhalten
  • Nehmen Sie den Ressourcen-Routing-Blog als Beispiel und geben Sie false zurück
    ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
    Holen Sie sich die Alias-Routendefinition

    Bei dieser Methode muss zunächst klargestellt werden, dass diese Methode in der Klasse thinkphp/library/think/Route.phpthinkphp/library/think/Route.php

    并且此类使用了thinkroute下的所有类

    这个方法就会把从检测路由过来的blog然后会在Route类中的alias属性里边进行获取,如果不存在则会返回NULL

    这个别名的使用会在下文中提到

    ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
    获取别名路由定义

    来到检测别名路由的最后return $item ? $item->check($request, $url) : false;也就是这行代码,从上图中就可以知道,这个item就是NULL

    并且最终将这个NULL给返回回去。

    检测URL绑定:checkUrlBind

    参数说明

    • $request : request类的实例
    • $url : 传过来的 blog

    在这个方法中只对下图咔咔圈出来的地方进行详解。

    ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
    检测URL绑定

    来到方法getBind

    Und diese Klasse verwendet alle Klassen unter thinkroute🎜🎜Diese Methode wird vom Erkennungs-Blog weitergeleitet dann aus dem Alias-Attribut in der Route-Klasse abgerufen werden. Wenn es nicht existiert, wird NULL zurückgegeben. Die Verwendung dieses Alias ​​wird unten erwähnt🎜🎜ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse🎜Holen Sie sich die Alias-Routendefinition🎜🎜🎜Kommen Sie zum Ende der Erkennung von Alias-Routenreturn $item ? $item->check($request, $url) : false ;Dies ist diese Codezeile. Wie Sie auf dem Bild oben sehen können, ist dieses Element NULL🎜🎜 und dieser NULL wird schließlich zurückgegeben. 🎜🎜URL-Bindung erkennen: checkUrlBind🎜🎜Parameterbeschreibung🎜
    • $request: Instanz der Anforderungsklasse
    • $url: Der übergebene Blog
    🎜 ist in diesem Methode werden nur die im Bild unten eingekreisten Bereiche im Detail erläutert. 🎜🎜ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse🎜URL erkennen Bindung 🎜🎜🎜 kommt zur Methode getBind Nachdem Sie die Routing-Bindung gelesen haben, können Sie sehen, dass KaKa die eingehenden Parameter ausgedruckt hat. 🎜

    Diese Methode basiert auf 同时在这个方法中会进行一次subDomain

    Gleichzeitig führt diese Methode einen subDomain code>Den aktuellen Subdomainnamen abrufen. <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"></p>Diese Methode gibt schließlich www zurück. Schauen Sie sich hauptsächlich den ersten eingekreisten Teil an. <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"></p>Rufen Sie den aktuellen Domänennamen über die Host-Methode in der Anforderungsklasse ab und teilen Sie ihn dann auf. <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"></p>Daten zurückgeben: array(1) { [0] =>n string(3) "www"n}<p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"></p>Weisen Sie dem Subdomainnamen einen Wert zu: $this->subDomain<p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"></p>Gib das Endergebnis zurück und kehre zurück der Subdomain-Name: www<figure data-tool="mdnice编辑器" style="margin: 0; margin-top: 10px; margin-bottom: 10px; display: flex; flex-direction: column; justify-content: center; align-items: center; border-radius: 16px; overflow: hidden;"> <img src="https://img.php.cn/upload/image/298/771/135/1606795677271859.png" title="1606795677271859.png" alt="ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse"><figcaption style="max-width:90%"></figcaption>Erhalten Sie den aktuellen Subdomain-Namen</figure><p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"></p>Dann wird zur oberen Ebene zurückgekehrt, wo die obere Ebene den erhaltenen aktuellen Subdomain-Namen WWW beurteilt. <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"></p>Einige sind alle Urteilsverarbeitung, da nur www zurückgegeben wird, nicht <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"></p>Die folgende Beurteilung basiert auf der Routing-Bindung. Hier müssen Sie nur NULL zurückgeben. Das Urteil von <figure data-tool="mdnice编辑器" style="margin: 0; margin-top: 10px; margin-bottom: 10px; display: flex; flex-direction: column; justify-content: center; align-items: center; border-radius: 16px; overflow: hidden;"><img src="https://img.php.cn/upload/image/485/525/920/1606795680508886.png" title="1606795680508886.png" alt="ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse"><figcaption style="max-width:90%"></figcaption> weiß, dass NULL auf der unteren Ebene zurückgegeben wird, daher wird das Urteil auch hier nicht getroffen, sodass das an die obere Ebene zurückgegebene Endergebnis falsch ist. </figure><p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"></p> <figure data-tool="mdnice编辑器" style="margin: 0; margin-top: 10px; margin-bottom: 10px; display: flex; flex-direction: column; justify-content: center; align-items: center; border-radius: 16px; overflow: hidden;">URL-Bindung erkennen<img src="https://img.php.cn/upload/image/315/355/403/1606795691202713.png" title="1606795691202713.png" alt="ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse"><figcaption style="max-width:90%"></figcaption></figure>Routing-Parameter bestimmen<p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"><span style="font-weight: 700; color: rgb(248, 57, 41);"><p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;">Gemäß der obigen Abbildung kehrt der Ausführungsprozess schließlich zu <code style="font-size: 14px; word-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; background zurück -color: rgba(27,31,35,.05); Schriftfamilie: Operator Mono, Consolas, Monaco, monospace; >thinkphp/ Library/think/route/Domain.phpDiese Methodethinkphp/library/think/route/Domain.php这个方法check检测域名路由。

    然后开始进行判断路由参数。

    没有路由参数跳过不执行。

    存在路由参数:执行方法setRouteVars :设置路由变量  这个参数是在框架版本5.1.5以上才可以使用,由于咔咔使用的版本有点低,就不对其详解了。

    ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
    检测域名路由
    ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
    文档

    添加域名中间件

    关于中间件这里也不对其进行解释,因为后期会新开一篇文章来详解,本文还是以路由为重点哈!

    检测分组路由

    接着就会来到检测域名路由的最后一个流程,执行代码return parent::check($request, $url, $completeMatch);

    会跳转到类文件:thinkphp/library/think/route/RuleGroup.php

    Dann beginnen Sie mit der Beurteilung der Routing-Parameter.

    Wenn kein Routing-Parameter vorhanden ist, wird er übersprungen und nicht ausgeführt. 🎜🎜Es gibt Routing-Parameter: Methode setRouteVars ausführen: Routing-Variablen festlegen. Dieser Parameter kann nur in der Framework-Version 5.1.5 oder höher verwendet werden. Da die von Kaka verwendete Version etwas niedrig ist, werde ich ihn nicht im Detail erklären. 🎜
    Domänennamen-Routing erkennen
    Dokumentation
    🎜Domänennamen-Middleware hinzufügen🎜🎜Über Middleware hier habe ich gewonnen Ich erkläre es auch nicht, da ich später einen neuen Artikel öffnen werde, um es im Detail zu erklären. Dieser Artikel konzentriert sich immer noch auf das Routing! 🎜🎜Gruppenrouting erkennen🎜🎜Dann kommen Sie zum letzten Prozess der Erkennung und Ausführung des Domainnamen-Routings der Code
  • $request: Eine Instanz der Request-Klasse
  • $url: Der übergebene Blog
  • $completeMatch: Ob die Route vollständig übereinstimmt

Bei dieser Methode stimmt KaKa hier nur mit einer davon überein Der Vorgang wird ausführlich erläutert, also das Zusammenführen von Gruppierungsparametern.

Weil diese Methode auch die Hauptlinie im gesamten Ausführungsprozess ist und der Rest Methoden zur Erkennung und Beurteilung sind.

ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
Gruppierungsparameter zusammenführen

IV. Zusammenfassung: Ich habe zwei Artikel mit dem Thema Routing verbracht und es ist noch nicht vorbei, nachdem ich den Quellcode so lange gelesen habe Schwieriger Teil. Verstanden. Die Klassen werden nacheinander verbunden. Das Routing wird hier vorübergehend gelernt und andere Inhalte werden später beim Lesen anderer Quellcodes hinzugefügt.

Sie müssen das Flussdiagramm, das hauptsächlich im Routing-Artikel ausgeführt wird, sorgfältig lesen.

Ausführungsflussdiagramm

Was letztendlich über das Gruppenattribut zurückgegeben wird, wenn Routing-Regeln registriert werden. Der Inhalt hier muss klar sein. ThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse
Kenne hauptsächlich den Konfigurationsprozess des Domänennamens beim Routing und wann der Domänenname konfiguriert wird.
Sie müssen eine klare Vorstellung vom Rückgabearray in der Routing-Datei und dem Prozess des Importierens der Routing-Datei haben.

Dann schauen wir uns den ArrayAccess an, den wir zuvor gelernt haben, und greifen auf Objekte wie Arrays zu.

Die magische Methode __get-Methode im Container In dieser magischen Methode gibt es die make-Methode, die hauptsächlich dazu verwendet wird, eine Instanz einer Klasse zurückzugeben und im Container zu speichern.

Hier geht es vorerst um den Routing-Aspekt. Es wird erwartet, dass ich das Routing in einem Artikel fertigstelle.

Beharrlichkeit beim Lernen, Beharrlichkeit beim Bloggen und Beharrlichkeit beim Teilen sind die Überzeugungen, an denen Kaka seit Beginn seiner Karriere festgehalten hat. Ich hoffe, dass Kakas Artikel in Nuoda Internet Ihnen ein wenig helfen können Ich bin Kaka, wir sehen uns in der nächsten Ausgabe.

Das obige ist der detaillierte Inhalt vonThinkPHP erkennt das URL-Routing anhand einer eingehenden Analyse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage