L'adresse de requête de cet article est le nom de domaine configuré.
D'après ce qui précède, nous pouvons savoir que la valeur de $instance
est une instance de appindexcontrollerIndex
.
Cela a également le concept de middleware. Néanmoins, le middleware sera mentionné séparément dans l'article suivant et ne sera pas expliqué ici.
Ici$this->app['middleware']->controller
Lorsque vous utilisez ce code, pouvez-vous encore vous rappeler s'il s'agit d'ArrayAccess ou de __get directement ?
Ici, nous accédons à l'objet sous forme d'accès tableau, nous utilisons donc la forme ArrayAccess. Les deux notions doivent être clairement distinguées.
Ensuite, le nom de la méthode sera obtenu. Quant à la façon d'obtenir le nom de la méthode, il est exécuté dans la méthode init de cette classe. nous seulement Vous avez juste besoin de savoir que ce qui est retourné est index
.
Ce à quoi vous devez faire attention ici, c'est cette ligne de code $this->rule->getConfig('action_suffix')
Ce qui est obtenu ici est le suffixe de la méthode d'opération.
À quoi cela ressemblera-t-il si vous définissez une valeur pour ce suffixe de méthode d'opération maintenant !
Ajoutez une valeur kaka et accédez-y pour voir quel sera le résultat.
Lors de l'accès à ce moment, il sera demandé que la méthode indexkaka n'existe pas. Est-ce clairement visible Cela signifie que ce paramètre est ajouté à tous ? noms de méthodes.
Une fois l'expansion du code pour obtenir le nom de l'opération actuelle terminée, l'étape suivante est if (is_callable([$instance, $action])) {
, ici On peut voir nos vieux amis is_callable
.
Quant aux deux paramètres de is_callable ici, vous savez ce qu'ils sont d'après ce qui précède. Le premier paramètre est l'instance de appindexcontrollerIndex
, et le deuxième paramètre est la méthode d'opération d'exécution de index
.
Ensuite, le rôle de is_callable
est de détecter si le nom de la méthode appindexcontrollerIndex
dans la classe index
peut être exécuté.
Évidemment, un vrai sera renvoyé ici, car il existe une méthode d'index dans la classe index.
Avant de faire le test ici, vous devez annuler le suffixe du nom de méthode que vous venez de configurer dans le fichier de configuration de l'application.
À travers ce is_callable
jugement, il y aura trois situations. Ensuite, Kaka l'analysera sous trois aspects.
Première situation : Il y a une méthode exécutable dans la classe
$vars
final est un tableau vide. Afin de tester ce morceau de code avec des paramètres, nous devons apporter une petite modification à l'adresse de routage.
La route n'a pas été utilisée auparavant, mais l'adresse par défaut a été utilisée directement. Cette route le sera. être utilisé ensuite Adresse
Utilisez cette adresse de routage pour imprimer les données, vous pouvez voir que c'est nous Définir les paramètres de routage.
Cette méthode d'obtention des variables de requête entrera dans la $this->request->param();
ligne de code
Comment le framework obtient les paramètres
Adresse d'accès : http://www.source.com/index.php/hello/hello
Comme on le sait plus haut, les paramètres s'obtiennent via $this->request->param()
, donc dans le cadre Comment pour avoir les paramètres !
Selon le code du processus, l'exécution sera comme indiqué ci-dessous. Utilisez la méthode correspondante pour obtenir les paramètres selon la méthode de requête obtenue. Ce qui doit être clair ici, c'est que nous utilisons la requête get. .
Le code sera donc exécuté vers $this->param
. Les paramètres de la requête actuelle et les paramètres de l'adresse URL sont fusionnés ici.
Puisque Kaka effectue des requêtes en utilisant le routage, le framework encapsule ici spécifiquement un paramètre de requête pour le routage.
Quand vous arriverez à cette route
méthode, vous comprendrez qu'il s'agit utilisé pour obtenir l'itinéraire lorsque vous voyez les commentaires, mais vous devez toujours entrer dans la couche d'entrée.
Dans l'article de routage précédent, les paramètres seront fusionnés lorsque les paramètres de routage seront obtenus. attribut route de la requête.
Donc $this->route
stocke tous les paramètres de cette règle de routage, y compris les paramètres de routage.
À ce stade, le processus d'exécution sera exécuté pour obtenir des variables prenant en charge le filtrage et les valeurs par défaut. $this->route
est passé dans Le paramètre est faux, donc ce bloc sera renvoyé directement.
Les résultats renvoyés ici seront renvoyés à l'endroit où nous avons commencé l'analyse ci-dessus également. C'est-à-dire que ceci $vars
est le paramètre de routage obtenu.
Deuxième cas : Il n'y a pas de méthode exécutable dans la classe
Lorsque le premier jugement est exécuté is_callable
lorsque la méthode de la classe de jugement n'est pas exécutable, la deuxième situation sera exécutée.
Demandez d'abord une adresse de routage non définie et voyez ce qui sera renvoyé.
Selon les invites données par le code, nous allons au contrôleur d'index pour créer un _empty
méthode, puis dans Venez la demander une fois et voyez ce qui se passe.
Il ressort des résultats de l'impression que lorsque la méthode accédée n'existe pas, la méthode _empty
sera exécutée.
Alors, comment cette méthode est-elle exécutée ? Cette méthode d'exécution est obtenue en utilisant le mécanisme de réflexion. Il existe un article spécial pour expliquer la réflexion Kaka auparavant, mais vous devez toujours lire et visualiser le document.
La troisième situation : il n'y a pas de méthode exécutable ou de méthode _empty dans la classe
Cette situation est relativement simple, c'est-à-dire que le message d'erreur est renvoyé directement, le la gestion des exceptions ici sera également abordée plus tard.
Après l'exécution des trois situations
Une fois l'analyse des trois situations terminée, la méthode statistique sera exécuté à la fin.
La méthode d'appel de la classe d'exécution de réflexion prend en charge la liaison de paramètres, ce qui signifie que le processus d'exécution de fermeture ici est terminé ici.
Les requêtes automatiques suivantes sont expliquées en détail dans la section 5.
Dans la section précédente, nous avons expliqué le routage pour trois ou quatre périodes. L'explication finale concernait la planification du routage. Alors, comment le routage défini est-il exécuté ?
Utilisez ensuite cette route comme cas
Mémorisez la valeur de retour lors du démarrage de la détection d'itinéraire Qu'est-ce que c'est ? Veuillez voir l'image ci-dessous
A cette époque, il n'y avait pas d'explication détaillée du code suivant, et le contrôleur instancié a été directement expliqué. Ce dont je veux parler maintenant, c'est de la 记录当前调度信息
ligne de code.
Ici $this->request
est utilisé pour exécuter la méthode magique de la classe conteneur lors de l'accès à une propriété inexistante, et renvoie enfin une instance via le conteneur.
Ainsi, le code sera exécuté à la position indiquée ci-dessous, définissant ou obtenant les informations de planification de la demande en cours
En imprimant ici lors de l'instanciation du contrôleur, vous constaterez que la valeur renvoyée ici est index
Cette valeur est définie dans le contrôleur. Ensuite, allez dans le contrôleur pour la vérifier. dehors.
Allez dans la méthode init pour imprimer le résultat pour voir le résultat, en utilisant l'adresse de routage
Savez-vous pourquoi la valeur ici a changé ?
La valeur imprimée ci-dessus est l'image ci-dessous, pourquoi est-ce l'image ci-dessus ici !
La dernière étape de la section de routage consiste à lancer la planification de l'itinéraire, et enfin à appeler un itinéraire au module/ Contrôleur/action de cette méthode.
Cette méthodedispatchModule
Enfin, elle instancie également une classe. Ensuite, nous devons étudier cette classe. en profondeur
D'après la trace du code, vous pouvez voir qu'il s'agit en fait de thinkroutedispatchModule
cette classe
Lorsque vous arrivez à la classe Module
, vous constaterez qu'elle hérite de la classe Dispatch
Dans le contrôleur de classe thinkphp/library/think/route/Dispatch.php
, vous constaterez que la variable dispatch
est définie.
En ce moment, revenez sur 路由到模块/控制器/操作
Quels sont les paramètres passés dans la méthode ici, haha
La valeur finale est donc simplement imprimée sous la forme d'un tableau séparé.
Ensuite, l'action suivante est la même que le processus de non-utilisation de l'accès au routage, il n'est pas nécessaire à Analysé.
C'est la fin de la façon dont l'adresse de routage est instanciée.
Concernant l'entrée de $this->app->controller
dans index
, le nom complet de la classe est renvoyé. Le processus d'implémentation spécifique ne sera pas analysé. La méthode d'implémentation est $this->parseModuleAndClass
.
Dans la section 4, il est uniquement mentionné que la méthode dans le contrôleur d'exécution est exécutée à partir de l'endroit ci-dessous Renvoyé, mais comment revenir n'est pas expliqué en détail.
Ensuite, je passerai un peu de temps à expliquer comment l'exécuter.
L'adresse de routage d'accès est celle indiquée ci-dessous. Vous pouvez voir que les données renvoyées sont les données dont vous avez besoin. à retourner dans le contrôleur.
La valeur imprimée est le suivant Emplacement de l'image, vous devez être clair ici ! La lecture du code source nécessite un peu d'exploration et, avec le temps, vous comprendrez le contenu.
Ce qui suit est une analyse approfondie de la méthode $this->autoResponse($data);
Cette méthode signifie littéralement Réponse automatique. .
Dans la première ligne de ce processus d'exécution $data instanceof Response
, si vous ne comprenez pas cela, vous ne pourrez pas le lire.
Ce que vous ne savez pas et ne comprenez pas doit encore être résolu. Il suffit de lire le code source et de le conquérir petit à petit pour gagner.
À propos de l'utilisation d'instanceof
Instanceof peut déterminer si un objet est une instance d'une certaine classe et si un objet implémente une certaine interface.
Ensuite, Kaka vous donnera un exemple simple pour démontrer cela, et vous comprendrez ce qui se passe.
Cas 1
Créez d'abord deux classes. Le cas est celui indiqué ci-dessous.
L'image ci-dessous est le résultat de l'impression. Vous pouvez voir que la première renvoie vrai et la seconde renvoie faux.
détermine si un objet est une instance d'une certaine classe. En d'autres termes, $instance
est une instance de la classe Test
, il retournera donc vrai.
Cas 2
Le cas 2 est différent du cas 1 Dans ce cas, une interface est établie, puis la classe implémente l'interface.
Les résultats finaux renvoyés sont tous vrais, ce qui signifie que si une classe implémente une autre interface, elle sera vraie lors du jugement.
Ce qui précède sont les deux cas de démonstration donnés pour instanceof
Les comprendre, c'est juger un exemple. S'il s'agit d'une instance d'une certaine classe.
Puis revenons au texte, $data instanceof Response
cette ligne de code ne sera définitivement pas établie, car la valeur transmise par les données est la valeur renvoyée par le contrôleur.
Ainsi, le processus d'exécution du code sera exécuté à la position indiquée ci-dessous. La fonction is_null
est utilisée pour rendre le jugement. Le jugement doit être faux, donc le code suivant sera exécuté.
Les deux premiers points de ce code ne seront pas analysés.
La première consiste à identifier automatiquement le type de sortie de réponse par défaut. Il s'agit de déterminer s'il s'agit d'une requête ajax. La méthode d'implémentation spécifique attendra que KaKa analyse le code source du framework cette fois, puis prendra un certain temps. chaque jour pour apprendre quelques méthodes du framework. Faites une petite dissection.
La deuxième position consiste à obtenir les informations de configuration correspondantes à partir du fichier de configuration. Elle examine la méthode de la classe de règles qui est exécutée, mais dans la méthode se trouve le code qui est exécuté pour obtenir les informations de configuration.
Ensuite, vous devez vérifier la troisième partie non mentionnée ci-dessus Il est analysé, c'est-à-dire que le code $response = Response::create($data, $type);
arrive à la méthode thinkphp/library/think/Response.php
de la classe create
Cette méthode est utilisée pour créer l'objet Response.
Il suffit de faire attention à l'endroit encerclé ici. Il n'y a pas de html dans le répertoire thinkphp/library/think/response
.
Le code instanciera donc directement cette classe puis reviendra.
Quand vous arrivez chez le constructeur de cette classe, vous faites principalement quelques choses.
Ensuite, le code attribuera la valeur de retour à la variable autoResponse
de cette méthode. $response
Enfin, ceci $response
est renvoyé et les informations renvoyées impriment le résultat comme indiqué ci-dessous.
Ensuite, le code reviendra toujours à la couche supérieure et reviendra à la fonction de fermeture d'origine.
A l'endroit encerclé par le clic, la ligne de code suivante concerne également le middleware. Il faut juste savoir que le résultat final renvoyé est le même que le résultat imprimé sur l'image.
Le résultat final est renvoyé à thinkphp/library/think/route/Dispatch.php
, où nous commençons l'analyse.
Renvoyer le résultat renvoyé à $data
, puis l'exécuterreturn $this->autoResponse($data);
Vous avez bien lu, ici Familiarisez-vous avec le code !
Le résultat renvoyé à ce moment est une instance de Response
, donc $response
sera renvoyé directement.
Jusqu'à ce point, la méthode dans le contrôleur est exécutée et la réponse est analysée.
Qu'il s'agisse des règles de routage définies ou d'un accès direct à l'aide de la méthode du contrôleur de module, le résultat de la réponse sera finalement renvoyé via la méthode ci-dessus.
«La persévérance dans l'apprentissage, la persévérance dans les blogs et la persévérance dans le partage sont les convictions auxquelles Kaka a toujours adhéré depuis sa carrière. J'espère que les articles de Kaka dans l'immense Internet. peut vous apporter un peu d'aide Silk. Je m'appelle Kaka, à la prochaine
.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!