En raison de la longueur de l'article, je l'écrirai dans un nouvel article.
Dans l'article précédent, je vous ai expliqué le contenu suivant.
Mais il reste encore beaucoup de choses à expliquer sur le routage. Ensuite, nous analyserons le contenu suivant.
Ce qui suit sera expliqué en détail un par un.
Je vous donne également un schéma d'exécution sur le routage pour votre référence.
Il n'y a aucune explication du code source dans cette section, il sert juste à ouvrir la voie aux chapitres suivants, il est donc nécessaire de savoir ce qu'est le dispatch.
La figure suivante montre le processus de retour à la couche supérieure pour continuer l'exécution après l'initialisation du routage.
Ensuite, la détection de routage sera exécutée.
Le test de routage est utilisé comme indiqué ci-dessous
Ensuite, nous pouvons imprimer ces informations de planification
Dans l'image ci-dessus, les valeurs pertinentessur l'expédition ont été imprimées
Ensuite, un simple aperçu de la routeCheck
méthode sera effectué
Dans la méthode ci-dessus, indiquez simplement clairement que le cache sera traité dans cette étape et qu'un objet Dispatch sera renvoyé.
Vous pouvez simplement jeter un oeil au code source de cette pièce, ce n'est pas très important.
route-check détecte le routage d'URL
Mais vous devez quand même jeter un bref coup d'œil à ce contenu.
Avant de le regarder, vous devez clarifier quels sont les deux paramètres transmis.
Paramètre 1 : règles de routage Paramètre 2 : Vérifier si le routage obligatoire est configuré
Après avoir connu la signification des paramètres, vous devez passer à la méthode de vérification 1 Découvrez.
Dans cette méthode, concernant la détection automatique du routage des noms de domaine, imprimons à quoi ressemblent les données.
En fait, le résultat renvoyé est le même que la méthode précédente de montage du routage des ressources
Ensuite. passera le séparateur pathinfo : remplacez le / dans l'URL par |
et obtenez la route du fichier de configuration pour voir si elle correspond complètement à
Enfin, utilisez la route par défaut pour analyser
Voici les détails que je n'entrerai pas dans une analyse approfondie. Il y a trop de détails sur le routage. Si vous vous concentrez sur les détails un par un, cela prendra beaucoup de temps.
Donc c'est tout pour cette pièce. Il vous suffit de savoir ce qui est exécuté et ce qui est rendu au final.
Dans la section précédente, $result = $domain->check($this->request, $url, $completeMatch);
exécutera ce bloc contenu.
Nous ne nous soucions pas de ce que cette méthode effectue ici.
Vous devez plutôt vous soucier de savoir si cela $this->request
est trouvé et exécuté.
La première chose que vous pouvez voir est que l'attribut request existe dans la classe Route.
Venez ensuite chez le constructeur de Route, où vous trouverez un nouveau monde.
ArrayAccess est utilisé ici pour accéder à l'objet comme un tableau, mais l'attribut request n'existe pas dans $app, donc la méthode magique __get dans la classe conteneur sera exécutée. Ce qui est appelé dans la méthode __get est. le conteneur La méthode make, le premier paramètre est request, et l'instance de request sera finalement renvoyée.
Le $app ici est en fait l'instance d'application qui arrive via l'injection de dépendances.
Après avoir lu autant de code source, je dois savoir que la classe App hérite de la classe Container, qui est la classe conteneur.
Il existe plusieurs méthodes magiques en bas de la classe conteneur.
Il vous suffit de faire attention à la méthode __get ici.
La méthode __get est une fonction qui sera exécutée lors de l'accès à une propriété inexistante.
C'est-à-dire que la méthode make finira par être exécutée.
Cette méthode passera par une série d'opérations et retournera finalement une instance de Request.
Et stockez cette instance dans le conteneur, et vous pourrez l'obtenir directement la prochaine fois que vous l'utiliserez.
À propos de la méthode make dans la classe conteneur, c'est une méthode particulièrement importante dans la classe conteneur, et c'est aussi la méthode soul.
Les instances de l'ensemble du framework sont renvoyées via le conteneur, il n'est donc pas nécessaire d'en dire plus sur l'importance de cette méthode.
Kaka a déjà eu une compréhension très approfondie des conteneurs et l'a présentée à tout le monde sous la forme d'un article.
Je vais d'abord dessiner le processus pour vous, puis suivre cette étape. selon le processus, cliquez simplement sur le rythme.
La première chose à confirmer est que la détection du routage du nom de domaine est effectuée dans l'application d'exécution.
Le processus d'exécution de niveau supérieur est l'endroit où se trouve le fichier d'entrée.
D'abord le code sera exécuté dans la méthode routeCheck
, puis regardez d'abord ce fichier.
Regardez d'abord les commentaires. L'explication de cette méthode est la détection de routage d'URL.
Dans cette méthode, le cache de route sera d'abord détecté. Ce contenu concerne le cache.
La chose la plus importante dans cette méthode est 路由检测 返回一个Dispatch对象
cette méthode.
Regardons ensuite cette méthode.
La première chose à clarifier est quels sont les deux paramètres transmis.
Les opérations suivantes seront effectuées lors de la détection du routage d'URL.
L'étape suivante consiste à effectuer une analyse approfondie du processus de routage des noms de domaine .
Les deux premières exécutions ne sont qu'un traitement de chaîne, il suffit de jeter un œil et de savoir ce qui sera renvoyé à la fin.
Clarifiez également la signification des trois paramètres dans l'exécution de la détection du routage des noms de domaine.
第六节的文章
Venez à $result = $domain->check($this->request, $url, $completeMatch);
ici, qui est l'objet de cette section.
Dans cette méthode, les processus suivants seront exécutés et les processus d'exécution importants seront analysés en profondeur.
Détecter l'alias de la route : checkRouteAlias
Explication des paramètres
Il y a deux points de connaissances qui doivent être clarifiés dans cette méthode
Il existe une méthode de détection des alias de routage que vous devez examiner
Le paramètre est le blog transmis dans l'image ci-dessus
En ce qui concerne cette méthode, la première chose à préciser est que cette méthode est en classe thinkphp/library/think/Route.php
et cette classe En utilisant toutes les classes sous thinkroute
, cette méthode obtiendra le blog routé à partir de la détection et l'obtiendra à partir de l'attribut alias dans la classe Route. S'il n'existe pas, NULL sera renvoyé
.L'utilisation de cet alias sera mentionnée ci-dessous
Arrivez à la fin de la détection de la route aliasreturn $item ? $item->check($request, $url) : false;
qui est cette ligne de code, Comme vous pouvez le voir sur l'image ci-dessus, cet élément est NULL
et ce NULL sera finalement renvoyé.
Détecter la liaison d'URL : checkUrlBind
Description du paramètre
Dans cette méthode, seuls les lieux encerclés dans l'image ci-dessous sont expliqués en détail.
Accédez à la méthode getBind
pour lire la liaison d'itinéraire. Vous pouvez voir que Kaka a imprimé les paramètres entrants.
Cette méthode fait partie de la classe thinkphp/library/think/route/Domain.php
. N'oubliez pas que cette classe est utilisée lors de la définition des règles de routage dans le groupe $This->. Si vous ne le savez pas, vous pouvez lire la première section de l'article de routage.
En même temps, cette méthode subDomain
obtiendra le nom de sous-domaine actuel.
Cette méthode finira par renvoyer www, en regardant principalement la première partie encerclée.
Obtenez le nom de domaine actuel via la méthode hôte dans la classe de requête, puis divisez-le.
Données de retour : array(1) { [0] =>n string(3) "www"n>
Attribuer une valeur au nom du sous-domaine : $this->subDomain
Renvoyer le résultat final et renvoyer le nom du sous-domaine : www
Ensuite, il reviendra en haut couche, où la valeur actuelle obtenue sera jugée sous-domaine WWW.
Certains sont tous des traitements de jugement. Le premier jugement ne sera certainement pas établi, car seul www est renvoyé, non.
Le jugement ci-dessous est basé sur la liaison de routage, ici il vous suffit de le faire. sachez que NULL sera toujours renvoyé. Le jugement effectué par
sait que NULL est renvoyé dans la couche inférieure, donc le jugement ici ne sera pas non plus établi, donc le résultat final est renvoyé à la couche supérieure C'est faux.
Déterminer les paramètres de routage
Selon la figure ci-dessus, le processus d'exécution reviendra éventuellement à thinkphp/library/think/route/Domain.php
cette méthodecheck
pour détecter le routage du nom de domaine.
Commencez ensuite à déterminer les paramètres de routage.
S'il n'y a pas de paramètre de routage, il sera ignoré et non exécuté.
Il existe des paramètres de routage : Exécuter la méthode setRouteVars : Définir les variables de routage. Ce paramètre ne peut être utilisé que dans la version 5.1.5 ou supérieure du framework. La version utilisée par Kaka étant un peu basse, je ne l'expliquerai pas. en détails.
Ajouter un middleware de nom de domaine
Concernant le middleware, je ne l'expliquerai pas ici, car un nouvel article sera ouvert ultérieurement pour l'expliquer en détail. Cet article se concentre toujours sur le routage !
Détecter le routage des paquets
Ensuite, vous arriverez au dernier processus de détection du routage du nom de domaine, et le code d'exécution return parent::check($request, $url, $completeMatch);
sautera à la classe 文件:thinkphp/library/think/route/RuleGroup.php
, car la classe Domain hérite de la classe RuleGroup.
Description du paramètre
Dans cette méthode, Kaka n'expliquera en détail qu'un des processus ici, qui consiste à fusionner les paramètres de regroupement.
Parce que cette méthode est également la ligne principale tout au long du processus d'exécution, et les autres sont des méthodes de détection et de jugement.
J'ai consacré deux articles sur le routage et ce n'est pas encore fini. Après avoir lu si longtemps le code source, le routage est le plus compliqué et le plus difficile à comprendre.
Les classes sont connectées les unes après les autres. Le routage sera temporairement appris ici, et d'autres contenus seront ajoutés plus tard lors de la lecture d'autres codes sources.
Vous devez lire attentivement l'organigramme principalement exécuté dans l'article de routage.
Ce qui est finalement renvoyé est la classe Domain via l'attribut group lors de l'enregistrement des règles de routage. Le contenu ici doit être clair.
Connaître principalement le processus de configuration du nom de domaine dans le routage et quand le nom de domaine est configuré.
Vous devez avoir une idée claire du tableau de retour dans le fichier de routage et du processus d'importation du fichier de routage.
Revoyons ensuite ArrayAccess que nous avons appris auparavant et accédons à des objets tels que des tableaux.
La méthode magique __get dans le conteneur. Dans cette méthode magique, il y a la méthode make, qui sert principalement à renvoyer une instance d'une classe et à la stocker dans le conteneur.
Il s'agit pour le moment de l'aspect routage. Il est prévu que le routage soit terminé en un seul article.
«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 que Kaka a toujours défendues depuis sa carrière. J'espère que les articles de Kaka dans Nuoda Internet pourront vous apporter un peu. un peu d'aide. Je m'appelle Kaka, à la prochaine fois.
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!