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.
Aber es gibt noch viel zu erklären zum Routing, und der folgende Inhalt wird als nächstes analysiert.
Das Folgende wird einzeln ausführlich erläutert.
Ich gebe Ihnen auch ein Ausführungsdiagramm zum Routing als Referenz.
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.
Der Routing-Test verwendet die folgende Abbildung
Dann können wir diese Planungsinformationen 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
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
Nachdem Sie die Bedeutung der Parameter kennen, müssen Sie zur Prüfmethode gehen, um dies herauszufinden.
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.
und es wird konfiguriert werden Ob die Dateierfassungsroute vollständig übereinstimmtDie endgültige Ausführung verwendet die StandardroutenanalyseDie 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.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.
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.
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.
__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.
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.
Lassen Sie mich zunächst den Prozess für Sie zeichnen und dann dem Rhythmus des Prozesses folgen.
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.
Zuerst wird der Code ausgeführt, um routeCheck
Schauen Sie sich bei dieser Methode zuerst diese Datei an. routeCheck
这个方法里边,那么就先看这个文件。
先看注释,对这个方法的解释就是URL路由检测。
在这个方法里边先是会对路由缓存进行检测,这块内容就是关于Cache的。
在这个方法里边最重要的的就是路由检测 返回一个Dispatch对象
Als Erstes muss geklärt werden, was die beiden übergebenen Parameter sind.
führt bei der URL-Routing-Erkennung die folgenden Schritte aus.
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.
Klären Sie außerdem die Bedeutung der drei Parameter bei der Ausführung der Erkennung des Domainnamen-Routings.
第六节的文章
来到$result = $domain->check($this->request, $url, $completeMatch);
$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. 🎜Routenalias erkennen: checkRouteAlias
Parametererklärung
Diese Methode enthält zwei Kenntnisse Punkt, der geklärt werden muss
Bei dieser Methode muss zunächst klargestellt werden, dass diese Methode in der Klasse thinkphp/library/think/Route.php
thinkphp/library/think/Route.php
中
并且此类使用了thinkroute下的所有类
这个方法就会把从检测路由过来的blog然后会在Route类中的alias属性里边进行获取,如果不存在则会返回NULL
这个别名的使用会在下文中提到
来到检测别名路由的最后return $item ? $item->check($request, $url) : false;
也就是这行代码,从上图中就可以知道,这个item就是NULL
并且最终将这个NULL给返回回去。
检测URL绑定:checkUrlBind
参数说明
在这个方法中只对下图咔咔圈出来的地方进行详解。
来到方法getBind
return $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🎜getBind
Nachdem Sie die Routing-Bindung gelesen haben, können Sie sehen, dass KaKa die eingehenden Parameter ausgedruckt hat. 🎜Diese Methode basiert auf 同时在这个方法中会进行一次
subDomain
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.php
Diese Methodethinkphp/library/think/route/Domain.php
这个方法check
检测域名路由。
然后开始进行判断路由参数。
没有路由参数跳过不执行。
存在路由参数:执行方法setRouteVars :设置路由变量 这个参数是在框架版本5.1.5以上才可以使用,由于咔咔使用的版本有点低,就不对其详解了。
添加域名中间件
关于中间件这里也不对其进行解释,因为后期会新开一篇文章来详解,本文还是以路由为重点哈!
检测分组路由
接着就会来到检测域名路由的最后一个流程,执行代码return parent::check($request, $url, $completeMatch);
会跳转到类文件:thinkphp/library/think/route/RuleGroup.php
$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.
„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!