Maison >développement back-end >tutoriel php >Explication détaillée du mécanisme de fonctionnement et du routage de Yii

Explication détaillée du mécanisme de fonctionnement et du routage de Yii

*文
*文original
2017-12-29 19:05:403147parcourir

Cet article présente principalement le mécanisme de fonctionnement et la fonction de routage du framework PHP Yii. Yii est un framework PHP lourd basé sur des composants, adapté au développement de grands sites Web. Les amis dans le besoin peuvent s'y référer. J'espère que cela aide tout le monde.

Aperçu du mécanisme de fonctionnement
Chaque fois que l'application Yii commence à traiter une requête HTTP, elle suivra un processus approximatif.

  • L'utilisateur soumet une requête au script d'entrée web/index.php.

  • Le script d'entrée chargera le tableau de configuration et créera une instance d'application pour gérer la requête.

  • L'application résoudra l'itinéraire demandé via le composant d'application de demande.

  • L'application crée une instance de contrôleur pour gérer spécifiquement la demande.

  • Le contrôleur créera une instance d'action et exécutera les filtres (filtres d'accès) pertinents pour l'action.

  • Si un filtre échoue à la validation, l'action sera annulée.

  • Si tous les filtres passent, l'action sera exécutée. L'action

  • charge un modèle de données, généralement à partir d'une base de données. L'action

  • affiche une vue et lui fournit le modèle de données requis.

  • Le résultat rendu sera renvoyé au composant d'application de réponse.

  • Le composant de réponse renverra le résultat du rendu au navigateur de l'utilisateur.

Le schéma ci-dessous montre comment l'application gère une demande.

2016317145658183.png (1144×876)

Bootstrapping
Le bootstrapping fait référence à : un environnement pré-préparé avant que l'application ne commence à analyser et à traiter les nouvelles demandes acceptées. L'accompagnement au démarrage s'effectuera à deux endroits : le script d'entrée (Entry Script) et le corps de la candidature (application).

Dans le script d'entrée, vous devez enregistrer l'autochargeur de fichiers de classe (Class Autoloader, appelé autoloader) de chaque bibliothèque de classes. Cela inclut principalement l'autoloader Composer, qui est chargé via son fichier autoload.php, et l'autoloader Yii, qui est chargé via la classe Yii. Le script d'entrée charge ensuite la configuration de l'application et crée une instance du principal de l'application.

Dans le constructeur du corps de l'application, le travail de démarrage suivant sera effectué :

  • Appelez la méthode yiibaseApplication::preInit() (pré-initialisation) pour configurer certains attributs d'application de haute priorité, tels que l'attribut yiibaseApplication::basePath.

  • Enregistrez yiibaseApplication::errorHandler.

  • Initialise les propriétés de l'application avec la configuration d'application donnée.

  • En appelant la méthode yiibaseApplication::init() (initialisation), elle appellera séquentiellement yiibaseApplication::bootstrap() pour exécuter le composant bootstrap.

  • Chargez le fichier manifeste d'extension supplier/yiisoft/extensions.php.

  • Créez et exécutez les composants d'amorçage déclarés par chaque extension.

  • Créez et exécutez chaque composant d'application et chaque composant de module (le cas échéant) déclarés dans l'attribut Bootstrap de l'application.

Étant donné que le bootstrapping doit être effectué avant de traiter chaque demande, il est extrêmement important de rendre ce processus aussi léger que possible. Veuillez optimiser cette étape autant que possible.

Veuillez essayer de ne pas enregistrer trop de composants de démarrage. Vous ne devez l'utiliser que s'il doit fonctionner tout au long du cycle de vie du traitement des requêtes HTTP. Pour donner un exemple de son utilisation : si un module doit enregistrer des règles d'analyse d'URL supplémentaires, il doit être répertorié dans l'attribut bootstrap de l'application, afin que les règles d'analyse d'URL puissent prendre effet avant d'analyser la requête. (Annotation : En d'autres termes, pour des besoins de performances, à l'exception de quelques opérations telles que l'analyse d'URL, la plupart des composants doivent être chargés à la demande au lieu d'être tous placés dans le processus de démarrage.)

Dans un environnement de production, vous pouvez activer la mise en cache du bytecode, tel qu'APC, pour minimiser davantage le temps requis pour charger et analyser les fichiers PHP.

Certaines applications volumineuses contiennent des configurations d'application très complexes qui sont divisées en de nombreux fichiers de configuration plus petits. À ce stade, vous pouvez envisager de mettre en cache l'intégralité du tableau de configuration et de le charger directement à partir du cache avant que le script d'entrée ne crée l'instance d'application.


Fichier d'entrée de yii
Un plug-in de gestion de configuration tiers : marcovwout est utilisé ici pour gérer la configuration de Yii Je n'entrerai pas dans les détails. Il ne reste que quelques paramètres de base de variables globales. Transmettez le tableau de configuration dans Yii::createWebApplication, puis appelez la méthode run. Une application Web est-elle en cours d'exécution ? Oui, l'abstraction au niveau le plus élevé est comme ceci : je passe la configuration correspondante dans un conteneur, puis l'application peut s'exécuter. normalement basé sur cette configuration.
Parlons de deux méthodes importantes dans YiiBase (importation, chargement automatique)

2016317145740223.png (561×219)

Un plug-in de gestion de configuration tiers est utilisé ici : marcovwout pour gérer la configuration de Yii. Je n'entrerai pas dans les détails. Il ne reste plus que quelques paramètres de base de variables globales. Transmettez le tableau de configuration dans Yii::createWebApplication, puis appelez la méthode run. Une application Web est-elle en cours d'exécution ? Oui, l'abstraction au niveau le plus élevé est comme ceci : je passe la configuration correspondante dans un conteneur, puis l'application peut s'exécuter. normalement basé sur cette configuration.

Routage
Lorsque le script d'entrée appelle la méthode yiiwebApplication::run(), la première opération qu'il effectue est d'analyser la requête d'entrée, puis d'instancier les poignées d'action du contrôleur correspondantes. cette demande. Ce processus est appelé routage. (Annotation : c'est à la fois un verbe et un nom en chinois)

Analyse des itinéraires

La première étape du guidage d'itinéraire consiste à analyser la demande entrante en un itinéraire. Comme nous l'avons décrit dans le chapitre Contrôleurs, une route est une adresse utilisée pour localiser les actions du contrôleur. Ce processus est implémenté via la méthode yiiwebRequest::resolve() du composant d'application de requête, qui appelle le gestionnaire d'URL pour effectuer la résolution réelle de la requête.

Par défaut, les requêtes entrantes incluent un paramètre GET nommé r, et sa valeur est traitée comme une route. Mais si vous activez yiiwebUrlManager::enablePrettyUrl, un traitement supplémentaire se produit lors de la détermination de l'itinéraire de la requête. Veuillez vous référer au chapitre sur l'analyse et la génération d'URL pour des détails spécifiques.

Si une route ne peut finalement pas être déterminée, le composant de requête lancera une exception yiiwebNotFoundHttpException (Annotation : le fameux 404).

Route par défaut

Si la requête entrante ne fournit pas d'itinéraire spécifique (il s'agit généralement d'une requête pour la page d'accueil), elle activera l'itinéraire par défaut spécifié par l'attribut yiiwebApplication::defaultRoute. La valeur par défaut de cette propriété est site/index, qui pointe vers l'action d'indexation du contrôleur de site. Vous pouvez ajuster la valeur de cette propriété dans la configuration de l'application comme ceci :

return [
  // ...
  'defaultRoute' => 'main/index',
];

route catchAll (route d'interception complète)

Parfois, vous souhaiterez votre l'application web est temporairement mise en mode maintenance, et la même page d'information sera affichée sur toutes les requêtes. Bien entendu, il existe de nombreuses façons d’y parvenir. Le moyen le plus simple et le plus rapide est de définir l'attribut yiiwebApplication::catchAll dans la configuration de l'application :

return [
  // ...
  'catchAll' => ['site/offline'],
];

l'attribut catchAll doit être transmis dans un tableau en tant que paramètre. Le premier élément du tableau est la route, et le reste. Les éléments ci-dessous précisent (sous forme de couples nom-valeur) les différents paramètres liés à l'opération.

Lorsque l'attribut catchAll est défini, il remplace toutes les routes analysées à partir de la requête entrante. Avec cette configuration, l'action utilisée pour gérer toutes les demandes entrantes sera la même site/hors ligne.

Créer une action

Une fois l'itinéraire de la requête déterminé, l'étape suivante consiste à créer un objet « action » pour répondre à l'itinéraire.

Les itinéraires peuvent être divisés en plusieurs fragments de composants à l'aide des barres obliques à l'intérieur. Par exemple, site/index peut être décomposé en deux parties : site et index. Chaque fragment est un identifiant pointant vers un module, un contrôleur ou une action.

À partir du premier fragment de l'itinéraire, l'application suivra le processus suivant pour créer des modules (le cas échéant), des contrôleurs et des opérations :

  • Définissez le corps de l’application au module actuel.

  • Vérifiez si le yiibaseModule::controllerMap du module actuel contient l'ID actuel. Si tel est le cas, un objet contrôleur est créé en fonction de la configuration du tableau, puis passe à l'étape cinq pour exécuter les fragments suivants de l'itinéraire.

  • Vérifiez si l'ID pointe vers un module dans la liste des modules dans l'attribut yiibaseModule::modules du module actuel. Si tel est le cas, un objet module sera créé en fonction de la configuration dans la table des modules, puis le module nouvellement créé sera utilisé comme environnement pour revenir à l'étape deux afin d'analyser l'itinéraire suivant.

  • Traitez cet ID comme un ID de contrôleur et créez un objet contrôleur. Utilisez l'étape suivante pour analyser les fragments restants de l'itinéraire.

  • Le contrôleur recherchera l'ID actuel dans son yiibaseController::actions(). S'il est trouvé, il créera un objet d'action basé sur la configuration dans la table de mappage ; sinon, le contrôleur tentera de créer une action en ligne correspondant à l'ID et définie par une méthode d'action.

Dans les étapes ci-dessus, si une erreur se produit, une exception yiiwebNotFoundHttpException sera levée, indiquant que le processus de démarrage du routage a échoué.

Recommandations associées :

Détails de la requête associée à YII

Yii2 Mécanisme de chargement automatique du code dans

Comment charger la fonction de code de vérification fournie avec Yii

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!

Déclaration:
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