Heim  >  Artikel  >  PHP-Framework  >  Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

咔咔
咔咔Original
2020-12-29 11:14:331912Durchsuche

1. Führen Sie die Methode im Controller aus

Die Anforderungsadresse dieses Artikels ist der konfigurierte Domänenname.

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

Sie können aus dem Obigen wissenDer Wert von $instance ist Instanz von appindexcontrollerIndex. $instance的值就是appindexcontrollerIndex的实例。

这块也是存在中间件的概念,依然如此中间件会在后文中单独提到,这里不做解释。

在这里$this->app['middleware']->controller

Dies gilt auch für das Konzept der Middleware. Die Middleware wird im folgenden Artikel separat erwähnt und hier nicht erläutert.

HereHier verwenden wir die Form des Array-Zugriffs, um auf das Objekt zuzugreifen, also verwenden wir die Form von ArrayAccess. Die beiden Konzepte müssen klar unterschieden werden. 🎜🎜🎜

Dann wird der Methodenname abgerufen. Um den Methodennamen zu erhalten, müssen Sie nur wissen, dass der zurückgegebene Wert lautet index即可。

在这里需要注意的就是这行代码$this->rule->getConfig('action_suffix')

Was Sie hier beachten müssen, ist diese Codezeile$ this->rule->getConfig('action_suffix'), was hier erhalten wird, ist das Suffix der Operationsmethode.

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

Wie würde es aussehen, wenn wir jetzt einen Wert für dieses Operationsmethoden-Suffix festlegen würden!

Fügen Sie einen Kaka-Wert hinzu und greifen Sie darauf zu, um zu sehen, wie das Ergebnis aussehen wird.

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

🎜

Beim Zugriff wird angezeigt, dass die Indexkaka-Methode nicht vorhanden ist. Dies bedeutet, dass dieser Parameter an alle Methodennamen angehängt wird.

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

Nachdem die Erweiterung des Codes zum Erhalten des aktuellen Operationsnamens abgeschlossen ist, ist der nächste Schritt if (is_callable([$instance, $action])) {, hier können Sie unseren alten Freund sehenis_callable. if (is_callable([$instance, $action])) {,在这里可以看见我们的老朋友is_callable

对于这里的is_callable俩个参数通过上文都知道是什么了,第一个参数为appindexcontrollerIndex的实例,第二个参数为index

Sie kennen die beiden Parameter von is_callable hier aus dem Obigen. Der erste Parameter ist Instanz von appindexcontrollerIndex, der zweite Parameter ist index führt die Operationsmethode aus. 🎜

ThenindexOb der Methodenname ausgeführt werden kann. is_callable的作用就是检测在appindexcontrollerIndex类中的index方法名是否可以执行。

很明显这里会返回一个true,因为在index类里边存在index方法的。

这里在做测试之前一定要把刚刚在app的配置文件中配置的方法名后缀那个给取消掉。

通过这个is_callable

Natürlich wird hier ein true zurückgegeben, da es in der Indexklasse eine Indexmethode gibt.

Bevor Sie den Test hier durchführen, müssen Sie das soeben in der App-Konfigurationsdatei konfigurierte Methodennamensuffix löschen.

Through this , 0.05); Schriftfamilie: „Operator Mono“, Consolas, Monaco, Monospace; > bestimmt, ob es drei Situationen geben wird, Kaka wird sie unter drei Gesichtspunkten analysieren. 🎜🎜🎜Die erste Situation: Es gibt eine ausführbare Methode in der Klasse🎜🎜🔜 Es sind keine Parameter festgelegt, daher ist
    am Ende ein leeres Array.
  • Um diesen Code mit Parametern zu testen, müssen wir eine kleine Änderung an der Routing-Adresse vornehmen.
  • Teil des Codes testen
  • Das Routing wurde vorher nicht verwendet, aber die Standardadresse wurde direkt verwendet.
  • $vars Verwenden Sie die neue Routing-Adresse zum Testen
Verwendung Wenn Sie die Daten dieser Routing-Adresse ausdrucken, können Sie sehen, dass es sich um die von uns festgelegten Routing-Parameter handelt.

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

Diese Methode zum Abrufen von Anforderungsvariablen gibt Folgendes ein: $this->request->param();Diese Codezeile$this->request->param();这行代码

框架是如何获取参数的

访问地址:http://www.source.com/index.php/hello/hello

在上文知道是通过$this->request->param()来获取参数的,那么在框架是如何获取参数的呢!

根据流程代码会执行到下图,根据获取的请求方式来使用对应的方式来获取参数,在这里需要明确的是我们使用的是get请求。

所以代码会执行到$this->param

Wie das Framework Parameter erhält🎜🎜Zugriffsadresse: http://www.source.com/index.php/hello/hello🎜🎜Wie wir oben wissen, erfolgt dies über $this->request->param() um die Parameter zu erhalten, Wie erhält man also die Parameter im Framework? 🎜🎜Gemäß dem Prozesscode wird die entsprechende Methode verwendet, um die Parameter gemäß der erhaltenen Anforderungsmethode abzurufen. Hier muss klargestellt werden, dass wir die Get-Anfrage verwenden. 🎜🎜Der Code wird also so ausgeführt: Da Kaka Anfragen über Routing stellt, kapselt das Framework hier speziell einen Anfrageparameter für das Routing.

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

Kommen Sie dazuroute-Methode. Wenn Sie die Kommentare sehen, werden Sie verstehen, dass sie zum Abrufen von Routing-Parametern verwendet wird, Sie müssen jedoch noch die Eingabeebene eingeben. route方法,看到注释就明白是用来获取路由参数的,但是还是需要在进入一层到input。

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

在之前路由的那一期文章中在获取到路由参数的时候会把参数合并到request的route属性。

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

所以说$this->route

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?🎜🎜🎜 Routing-Parameter abrufen🎜🎜🎜Im vorherigen Artikel zum Routing werden die Parameter beim Abrufen der Routing-Parameter mit dem Routenattribut der Anforderung zusammengeführt. 🎜🎜Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?🎜🎜🎜 Routing-Variablen festlegen🎜🎜🎜So say

Zu diesem Zeitpunkt wird der Ausführungsprozess ausgeführt, um Variablen zu erhalten, die Filterung und Standardwerte unterstützen. Im obigen $this->routeDer übergebene Parameter ist falsch, daher wird dieser Block direkt zurückgegeben. $this->route穿进来的参数是false,所以说这块会直接返回。

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

这里返回的结果会返回给上文我们开始解析的地方,也就是说这个$vars

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

Das Abrufen von Variablen unterstützt Filterung und Standardwerte

🎜Zurückgegebene Routing-Parameter-Ergebnisse🎜🎜🎜🎜Zweiter Fall: Es gibt keine ausführbare Methode in der Klasse🎜🎜

Wenn das erste Urteil ausgeführt wirdis_callable判断类里边的方法不可执行时,就会执行到第二种情况。

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

先来请求的一个没有设置的路由地址,看会返回什么。

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

根据代码给的提示,我们来到index控制器建立一个_empty

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

Die zweite Ausführungssituation
Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?Fordern Sie zunächst eine nicht festgelegte Routing-Adresse an und sehen Sie, was zurückgegeben wird.

🎜Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?🎜
Fehlerrückgabe
🎜Gemäß den Anweisungen des Codes kommen wir zum Index-Controller, um einen _empty Methode, und fordern Sie es dann einmal an und sehen Sie, was passiert. 🎜🎜🎜🎜

Sie können den Druckergebnissen entnehmen, dass diese Methode ausgeführt wird, wenn die Methode, auf die zugegriffen wird, nicht vorhanden ist_empty.

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

Wie wird diese Methode ausgeführt? Diese Ausführungsmethode wird durch die Verwendung des Reflexionsmechanismus erreicht. Es wurde bereits ein Artikel zur Erläuterung der Reflexion von Kaka veröffentlicht, Sie müssen das Dokument jedoch noch lesen und anzeigen.

Der dritte Fall: Es gibt keine ausführbare Methode oder _empty-Methode in der Klasse

Dieser Fall ist relativ einfach, er gibt nur die Fehlermeldung direkt zurück. Apropos.

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

Nach der Ausführung der drei Situationen

Nach der Analyse der drei Situationen wird am Ende die statistische Methode implementiert.

Die Methode zum Aufrufen der Reflexionsausführungsklasse unterstützt die Parameterbindung, was bedeutet, dass der Abschlussausführungsprozess hier abgeschlossen ist.

Zu den nachfolgenden automatischen Anfragen werden Einzelheiten in Abschnitt 5 erläutert.

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

2. So instanziieren Sie den Controller mit der Routing-Adresse

Im vorherigen Abschnitt haben wir das Routing für drei oder vier Perioden erklärt, und die letzte Erklärung finden Sie hier: Wie führt man dann das festgelegte Routing aus?

Verwenden Sie diese Route als Nächstes als Fall

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

Erinnern Sie sich noch an den Rückgabewert, wenn Sie die Routenerkennung starten? Bitte schauen Sie sich das Bild unten an.

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?

🎜Dann die Der Code kehrt weiterhin zur oberen Ebene zurück und kehrt zur ursprünglichen Abschlussfunktion zurück. 🎜🎜An der von Kaka eingekreisten Stelle geht es in der nächsten Codezeile auch um Middleware. Sie müssen nur wissen, dass das endgültige Rückgabeergebnis mit dem im Bild gedruckten Ergebnis übereinstimmt. 🎜🎜Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?🎜
Zurück zur Zwischenebene
🎜Das Endergebnis wird an thinkphp/library/think/route/Dispatch.php, wir haben die Analyse von hier aus gestartet. 🎜🎜🎜🎜

Ergebnis zurückgeben an autoResponse($data);$data,然后在进行执行return $this->autoResponse($data);

你没看错,这里的代码熟悉吧!

这个时候返回的结果就是Response的实例,所以会直接返回$response

Sie haben richtig gelesen, der Code hier kommt Ihnen bekannt vor!

Wie instanziiert die ThinkPHP-Routing-Adresse den Controller?Das zu diesem Zeitpunkt zurückgegebene Ergebnis ist $response.

Automatische Antwort

🎜🎜Bis zu diesem Punkt wird die Methode im Controller ausgeführt und die Antwort analysiert. 🎜

Unabhängig davon, ob es sich um festgelegte Routing-Regeln oder um den direkten Zugriff über die Modul-Controller-Methode handelt, wird das Antwortergebnis letztendlich über die obige Methode zurückgegeben.

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 vonWie instanziiert die ThinkPHP-Routing-Adresse den Controller?. 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