Maison > cadre php > PensezPHP > ThinkPHP détecte si les variables d'URL et les règles de routage correspondent

ThinkPHP détecte si les variables d'URL et les règles de routage correspondent

咔咔
Libérer: 2020-12-01 13:42:32
original
2042 Les gens l'ont consulté
«

Cet article continue d'expliquer le code source du routage. Si vous voyez cet article, vous pouvez d'abord lire les articles de routage écrits auparavant, soit un total de deux articles.

Avant-propos

Après avoir interprété le code source de routage des deux premiers articles , je pense que tout le monde a une bonne compréhension du routage. J'ai une certaine compréhension.

Cet article continuera à expliquer l'analyse du code source de routage ThinkPHP, qui constitue également la fin du contenu de routage. Il y aura un article sur la planification du routage plus tard. J'espère que tout le monde a une bonne compréhension de la barre de routage. !

Concernant le routage, Kaka estime que c'est le point central le plus difficile de la lecture du code source dans l'ensemble du framework, et cela prend également beaucoup de temps.

Parce qu'il existe de nombreuses classes imbriquées, pourquoi ne pas suivre le bon sens, comme $this->group.

Bien qu'il s'agisse d'une simple relation d'appel, de nombreuses fonctions sont exécutées dans le code source.

Le code source général pensera que ce groupe est une classe simple. En fait, ce n'est pas le cas. Le résultat final renvoyé est un peu surprenant.

Tout ce qui concerne le framework doit donc être soigneusement compris. La lecture du code source vise principalement à améliorer votre compréhension du framework et de ses idées de conception.

Suivez toujours les étapes, regardez d'abord l'organigramme d'exécution de la machine minière, puis vous pourrez lire l'article clairement en fonction de l'organigramme.

Toutes les lectures de code source au cours de la période ultérieure seront directement ajoutées ici pour supplément.

ThinkPHP détecte si les variables dURL et les règles de routage correspondent
Processus d'exécution du framework

1. Détecter les paramètres de groupe de fusion de routage, vérifier le routage de groupe

À la fin de l'article précédent, nous avons parlé de la position dans l'image ci-dessous. Cette position est encore vide pour le moment. Cette position vide est le paramètre de regroupement de fusion qui sera abordé ensuite.

La fusion des paramètres consiste en fait à fusionner les paramètres de routage et les paramètres par défaut.

ThinkPHP détecte si les variables dURL et les règles de routage correspondentLieu d'exécution
Afin de montrer clairement le processus d'exécution, Kaka a encerclé le processus d'exécution.

Fichier d'exécution :

  1. thinkphp/library/think/App.php -> $dispatch = $this->route->check($path, $must);
  2. thinkphp/library/think/Route.php -> >$result = $domain->check($this->request, $url, $completeMatch); ->
    ->
  3. thinkphp/library/think/route/Domain.php$result = $this->checkRouteAlias($request, $url);return parent::check($request, $url, $completeMatch);
  4. thinkphp/library/think/route/RuleGroup.php correspondant Relation d'exécution : $this->mergeGroupOptions();
    1. La détection d'itinéraire renvoie un objet Dispatch
    2. Détecter le routage du nom de domaine
    3. Détecter le routage des alias-> regroupement Routage
    4. Fusionner les paramètres de regroupement
    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Processus d'exécution de détection d'itinéraire

    Vous pouvez voir ceci Le titre de cette section est Détection des paramètres de routage et vérification du routage des paquets, il y a donc encore beaucoup de contenu sur la détection du routage.

    C'est juste que Kaka se concentre uniquement sur la fusion des paramètres de groupe et la vérification du routage de groupe. Enfin, les autres contenus ne pénètrent pas dans toute la ligne, nous n'en discuterons donc pas en profondeur.

    Le prochain article parlera d'une partie du contrôleur, mais tout ne sera pas écrit !

    Fusionner les paramètres de regroupement

    Parlons d'abord de ce contenu.

    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Fusionner les paramètres de regroupement

    Avant de regarder cet élément de contenu, vous devez vérifier l'attribut $this->parent pour voir à quoi cette valeur est définie.

    Vous pouvez savoir qu'il s'agit de la classe instanciée de Domain en l'imprimant avec debug_backtrace().

    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Imprimer les résultats

    Passons ensuite à la méthode mergeGroupOptions pour une explication détaillée.

    • Fichier exécuté : thinkphp/library/think/route/RuleGroup.php 164 lignes
    • $this->parent : class thinkrouteDomain
    • Obtenez la définition du paramètre de routage. Si le paramètre de routage n'existe pas, c'est 'merge_rule_regex' => bool(false). Quoi qu'il en soit, le paramètre de routage sera ajouté à la fin. 🎜>
    • Paramètres de groupe de fusion : $this->mergeOptions : paramètres de routage 'après', 'modèle', 'en-tête', 'réponse', 'append', 'middleware'
    • Fusionner les paramètres via array_merge
    • et verrouiller le paramètre lockOption
    • et renvoyer le résultat fusionné, et enfin renvoyer le résultat $ this->option
    • Renvoyer les résultats comme indiqué ci-dessous

    Résultats de retour finauxThinkPHP détecte si les variables dURL et les règles de routage correspondent

    Résultats de retour
    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    En dernière analyse, il s'agit de fusionner les paramètres de routage. Veuillez consulter la figure ci-dessous pour les paramètres de routage officiellement pris en charge.
    Généralement, nous n'utilisons pas de paramètres de routage. Nous le mentionnons simplement ici pour faire savoir à tout le monde qu'il existe. Si vous insistez pour l'utiliser, assurez-vous de lire clairement le numéro de version, sinon vous rencontrerez A. beaucoup de problèmes.

    Paramètres de routage pris en charge
    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Vérifier le routage de groupe

    Fichier : thinkphp/library/think/route/ RuleGroup .php Ligne 183.

    Ici, nous devons d'abord clarifier quelle est la valeur de la variable $rules.

    Détecter le routage des paquets
    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Imprimez la valeur de $rules et vous pouvez voir qu'il existe deux situations.

    Le premier cas n'est pas le routage des ressources.

    Le deuxième cas est le routage des ressources.

    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    La valeur de $rules

    Cela est dû au fait que Kaka ne définit que deux routes dans le fichier de routage, une route de ressources et une route sans ressources.

    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Fichier de configuration de routage

    D'après les données encerclées dans l'image ci-dessus, vous pouvez savoir que la valeur de $item est divisée en deux situations où le la boucle est exécutée. La méthode de vérification dans

    • 执行thinkrouteResource Object
    • 执行thinkrouteRuleItem ObjectLa méthode de vérification dans

    D'après le résultat de l'impression de l'artefact, vous pouvez voir que la méthode de vérification de la classe thinkphp/library/think/route/RuleGroup.php est également exécutée lors du routage des ressources.

    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Artifact Print

    Pourquoi le routage des ressources exécute-t-il la vérification de thinkphp/library/think/route/RuleGroup.php

    Parce que la classe de ressources hérite de la classe RuleGroup.

    et la valeur de $item est une instance de la classe Resource, donc la méthode check sera exécutée.

    Alors, combien il est important d'avoir un artefact. L'article précédent a fourni une explication détaillée de la façon d'utiliser cet artefact si vous ne savez pas encore comment l'utiliser, ou si vous ne le savez pas. comment l'utiliser, allez le voir ! L'artefact peut imprimer directement le flux d'exécution du code, ce qui est très utile dans le processus de débogage du code source.

    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Relation d'héritage

    Après avoir réexécuté la méthode check, le résultat final est renvoyé comme encerclé dans l'image ci-dessous.

    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Vérifier le regroupement d'itinéraires

    Vérification de l'exécution du routage sans ressources

    Fichier : thinkphp/library/think/ route /RuleItem.php numéro de ligne 231 Il s'agit de la méthode d'exécution du routage sans ressources.

    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Méthode d'exécution du routage sans ressources

    Après avoir entré la méthode de détection des règles de routage, les paramètres de routage seront toujours fusionnés.

    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Détecter les itinéraires

    La méthode de fusion des paramètres de routage a été mentionnée ci-dessus, je n'entrerai donc pas dans les détails ici.

    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Fusionner les paramètres de routage

    Jusqu'à présent, nous avons fini de parler de la fusion des paramètres de groupe et de la vérification du routage de groupe sous routage de détection si vous n'êtes pas clair sur l'idée. , vous pouvez consulter la carte mentale.

    2. Vérifiez si les variables d'URL et les règles de routage correspondent

    Les cas suivants utilisent le routage normal et aucune ressource n'est utilisé Dans le cas du routage, le fichier thinkphp/library/think/route/RuleItem.php

    est utilisé pour imprimer les données à l'aide d'un artefact.

    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Processus d'exécution
    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Processus d'exécution

    Ce qui précède est l'ensemble du processus d'exécution, ce qui suit est le contenu qui doit être analysé pour vérifier si l'URL et la règle de routage correspondent.

    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Vérifiez si l'URL et la règle de routage correspondent

    Avant de commencer le contenu ici, résolvons un problème avec Kaka.

    Allez à la couche supérieure du code ci-dessus et imprimez le résultat renvoyé.

    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Imprimer le contenu
    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Imprimer le résultat

    Jetez ensuite un œil au fichier de configuration de routage route.php.

    Dans ce fichier, Kaka ne configure que deux adresses de routage, dont une seule est une route de ressources, et a mis en place des règles variables.

    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Fichier de configuration de routage

    À ce stade, ajoutez une adresse de routage au fichier de configuration de routage.

    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Fichier de configuration de routage

    Imprimez ensuite le résultat en début d'article.

    Y a-t-il une question ici, pourquoi cela renvoie-t-il faux ?

    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Vérifiez si l'URL et la route des règles correspondent et imprimez les résultats

    Résoudre pourquoi vérifier si l'URL et la route des règles correspondent renvoie faux

    Ensuite, vous devez vous rendre au point source pour vérifier.

    Le contenu de cette section a été expliqué ci-dessus. Il existe deux situations pour l'élément ici, la première est 执行thinkrouteResource Object et la seconde est 执行thinkrouteRuleItem Object.

    exécuteront tous la méthode de vérification.

    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Le point source du processus d'exécution

    est très clair qu'il doit être renvoyé depuis le thinkphp/library/think/route/RuleItem.php dans le fichier d'exécution check.

    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Détecter le routage

    Sur la base de ces deux lignes de code, on peut comprendre que la variable $match doit être liée.

    Cette variable est utilisée pour détecter si l'URL et la règle de routage correspondent. Cela revient à ce que nous avons dit au début.

    Donc, le code source est comme ceci, lien par lien, lisez-le lentement, et vous le comprendrez après avoir lu la suite.

    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Trouver la relation basée sur le code

    Commencer officiellement à analyser le code

    Description du paramètre

    • $url : Adresse d'accès
    • $option : Fusionner les paramètres du groupe
    • $completeMatch : Si l'itinéraire correspond complètement

    Fichier d'exécution : Fichier : thinkphp/library/think/route/RuleItem.php

    Entrons dans les détails de l'implémentation spécifique.

    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Code source analysé

    Tout d'abord, un jugement sera effectué pour savoir si l'itinéraire correspond complètement. Au cours du processus d'interprétation de l'itinéraire, de nombreux jugements de ce type sont apparus plus tard. , Kaka va écrire un article séparé pour expliquer pourquoi le jugement est nécessaire.

    Ensuite, le code sera exécuté pour fusionner les règles de routage. Ce processus fusionne les règles de routage.

    En ce qui concerne la méthode getPattern, elle renvoie directement car la règle de routage n'est pas définie. La valeur initiale de cette variable dans la règle de routage est un tableau vide, c'est donc toujours un tableau vide après la fusion.

    Je ne sais pas si vous aurez des doutes sur la deuxième ligne de code, sur ce qui est exactement exécuté.

    L'injection de dépendances est effectuée dans le constructeur de cette classe pour injecter l'instance // de routage : thinkRoute.

    Selon le suivi du code, les informations de configuration sont obtenues à partir des informations de configuration. Le résultat renvoyé est string(1) "/"

    ThinkPHP détecte si les variables dURL et les règles de routage correspondent
    Fusionner les règles de routage
    <.> Suivant Traitez les règles de routage et remplacez tout | par /

    ThinkPHP détecte si les variables dURL et les règles de routage correspondent Traitez les règles de routage
    Cela peut être clair en fonction de la $rule renvoyée dans le photo ci-dessus Une chose est que le jugement ci-dessous ne sera pas exécuté.

    ThinkPHP détecte si les variables dURL et les règles de routage correspondentLe jugement ne sera pas exécuté
    Une méthode que vous devez connaître ici est preg_quote : la fonction est utilisée pour échapper aux caractères d'expression régulière

    Donc enfin, la variable slash sera renvoyée sous la forme

    , dans laquelle toutes les barres obliques inverses sont des caractères d'échappement. string(6) "/-/"

    La fonction preg_replace sépare les chaînes par une expression régulière.

    La fonction strncasecmp() compare deux chaînes (non sensible à la casse).

    La fonction preg_match_all est utilisée pour effectuer une correspondance d'expression régulière globale.

    La fonction preg_match_all est utilisée pour effectuer une correspondance globale d'expression régulière.

    Cette méthode comporte plusieurs fonctions qui sont très peu familières à la plupart des gens. Vous ne pouvez vérifier les informations que vous-même, et Kaka n'expliquera pas l'utilisation de ces méthodes.

    Résumé

    Ce qui précède est le contenu de la détection de la correspondance entre la variable URL et la route de règle. les fonctions de ce bloc sont : Parlons de quelques aspects.

    • Pour vérifier si l'itinéraire correspond complètement, le paramètre utilisé est complete_match.
    • Fusionner les règles de routage, qui est l'utilisation d'un modèle.
    • Le plus important est que la partie suivante gère diverses fonctions sur l'adresse.
    • Le retour final se présente sous la forme d'un tableau de paramètres de routage.
    • Ce qui précède est le cas où des paramètres de routage existent. S'il n'y a pas de paramètres de routage, false sera renvoyé directement.
    • Ensuite, revenez en arrière et exécutez l'analyse du routage des règles correspondantes ici.

    Kaka ne laissera pas de côté l'organigramme ici. Vous pouvez le déboguer selon l'outil de débogage de code fourni par Kaka, ou vous pouvez consulter le guide fourni par Kaka ci-dessus.

    Le routage touche bientôt à sa fin. Le dernier élément de contenu concerne la planification du routage, comment le routage est planifié et à qui les résultats finaux de l'exécution du routage sont renvoyés. Ce sont toutes des questions gênantes. Ka fournira une analyse détaillée de la planification des routages.

    Cet article se concentre principalement sur la détection des paramètres de routage, des variables de routage et des règles. Ce contenu doit être lu avec les articles précédents. Il existe des articles sérialisés sur la page Web PHP chinoise. peut revenir Vérifiez-le !

    «

    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. je peux t'apporter un peu d'aide Silk. 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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal