Maison > développement back-end > tutoriel php > De la demande à la réponse: un voyage dans les internes de Drupal 8

De la demande à la réponse: un voyage dans les internes de Drupal 8

Jennifer Aniston
Libérer: 2025-02-17 11:11:38
original
1014 Les gens l'ont consulté

profondeur dans Drupal 8 (et Symfony2): processus de demande à réponse

Points de base

  • Drupal 8 utilise les composants HTTPKernel et HTTPFoundation de Symfony2 pour traiter les demandes et les réponses des utilisateurs, encapsuler les demandes de manière axée sur l'objet, les transmettre à l'application et retourner les réponses.
  • Le composant httpkernel est le cœur de toute application basée sur Symfony qui démarre le processus dans le fichier index.php et utilise des processus pilotés par des événements. Cela rend l'application plus flexible et les tâches peuvent être déléguées aux auditeurs pour ces événements.
  • Si le contrôleur ne renvoie pas d'objet de réponse, le noyau déclenche l'événement Kernel.View et l'abonné est responsable de la conversion des résultats du contrôleur en l'objet de réponse réel. Cette flexibilité permet au contrôleur de renvoyer tout type d'objet tant qu'il est combiné avec l'abonné de l'événement de vue qui convertit l'objet en réponse correcte.
  • htmlRenderer en tant que type de rendu de contenu principal le plus couramment utilisé, construit des pages en utilisant le concept de variantes de page. Ce processus se produit dans la méthode HtmlRenderer's Prepare (), qui fournit un tableau de rendu #Type = & gt; Ensuite, enveloppez-le dans le tableau de rendu #type = & gt;

Dans le premier article sur le développement du module Drupal 8, nous avons appris un peu sur les aspects de routage de ce processus. Nous avons vu que la création de pages avec des chemins n'est désormais qu'un problème de déclaration des itinéraires qui correspondent au contrôleur. Comme nous pouvons le voir, ce dernier peut retourner un tableau rendu qui est interprété comme un marqueur et affiché dans la zone de contenu principale de cette page. Mais saviez-vous que dans les coulisses, Drupal convertit réellement ce tableau en un objet Response selon les réglementations HttpkerneLinterface de Symfony?

From Request to Response: A Journey into Drupal 8 Internals

Dans cet article, je veux nous donner un regard plus profond sur la structure interne de Drupal 8 (et Symfony2) et de comprendre ce qui se passe réellement (et ce qui peut arriver) entre le moment où l'utilisateur fait une demande au moment où ils voient la réponse qu'ils renvoient). Les exemples que j'ai mentionnés ci-dessus ne sont qu'une direction où ce processus peut aller, et aujourd'hui nous verrons d'autres possibilités. L'objectif est de comprendre la flexibilité du système, ce qui peut à son tour nous aider à créer d'excellentes applications.

Avant de plonger plus profondément, je vous recommande fortement de consulter ce graphique, qui fait un excellent travail de synthèse ce qu'on appelle souvent de rendu pipeline . Bien qu'il me semble que cela représente plus que le nom ne le suggère, car le système de rendu n'est qu'une partie de l'image, quoique une grande partie.

Contrôleur frontal (index.php)

Symfony2 est désormais une partie importante de Drupal. Ce dernier utilise de nombreux composants Symfony, les composants les plus importants de cet article sont les composants Httpkernel et HttpFoundation. Ensemble, ils sont responsables de l'encapsulation des demandes de l'utilisateur, de les transmettre à l'application, puis de renvoyer le contenu renvoyé à l'utilisateur de manière cohérente et orientée objet.

httpkerneLinterface (vous en avez peut-être entendu parler d'autres contextes également) collez tout cela ensemble en recevant l'objet request et en renvoyant toujours l'objet réponse . Un concept très simple mais puissant.

Ce processus démarre dans le fichier index.php, qui génère d'abord l'objet de demande et le passe à la méthode httpkernel :: handle (). Ce dernier est alors responsable du retour de l'objet de réponse. À un niveau élevé, cela se produit à la fois dans les applications Drupal et les applications Symfony (ou toute autre application qui utilise des composants httpkernel).

httpkernel et événements

httpkernel est au cœur de toute application basée sur Symfony. Comme nous pouvons le voir, sa méthode de poignée () a beaucoup de responsabilités dans la préparation de la réponse, et elle le fait avec un processus axé sur les événements. Cela rend l'application très flexible, et le travail lourd est toujours délégué à l'auditeur de ces événements.

Si vous regardez le graphique précédent, vous pouvez voir que ce flux de travail est décrit dans la deuxième colonne, qui représente essentiellement l'adhésif en termes de symfony et de drupal.

Il commence par le premier événement appelé Kernel.Request. Les abonnés de cet événement gèrent diverses tâches. Mais dans Drupal 8, deux tâches très importantes sont la négociation et le routage des formats. Le premier détermine le type de réponse qui doit être renvoyé (HTML, JSON, Image, PDF, etc.), et le second détermine le code responsable du traitement de cette réponse (la clé _Controller définie par l'itinéraire dans le fichier routing.yml ). Cependant, comme la plupart des étapes de ce flux de travail d'événement, si l'auditeur renvoie l'objet de réponse, le processus saute la plupart des étapes suivantes (propagation d'arrêt) et va directement à Kernel.Response.

Le deuxième événement est Kernel.Controller, qui est appelé après que l'application sait quel contrôleur est responsable du traitement de la demande. À ce stade, l'auditeur peut toujours effectuer des opérations primordiales dessus. Immédiatement après cette étape, le noyau est responsable de l'analyse des paramètres transmis au contrôleur. Une telle opération dans Drupal est de charger des objets en fonction de l'ID trouvé dans la demande (comme un nœud) et de fournir ces objets directement au contrôleur. Le contrôleur sera ensuite finalement appelé avec les paramètres correspondants.

Le contrôleur est responsable du retour d'une réponse d'une certaine sorte. S'il renvoie un objet de réponse, le processus passe à l'événement Kernel.Response. Ce dernier auditeur peut effectuer des modifications de dernière minute à l'objet, comme la modification de l'en-tête ou le contenu lui-même. Et après l'avoir obtenu à partir de la méthode Handle (), le contrôleur frontal l'envoie à l'utilisateur à l'aide de la méthode Send () sur l'objet de réponse et termine le processus.

From Request to Response: A Journey into Drupal 8 Internals

Une compréhension plus profonde des tableaux rendus

Si le contrôleur ne renvoie pas d'objet de réponse, le noyau déclenche le dernier événement: Kernel.view. Ses abonnés sont responsables de la conversion des résultats du contrôleur en objets de réponse réels. Donc, cela signifie que vous pouvez retourner n'importe quel type d'objet du contrôleur, tant que vous le combinez avec l'abonné de l'événement de vue qui convertit cet objet en réponse correcte.

Cependant, comme nous le voyons dans l'exemple, le contrôleur renvoie le tableau rendu la plupart du temps. Cela représente généralement le contenu principal de la page (similaire au rappel de page dans Drupal 7).

Pour gérer cela, Drupal 8 a un MAINCONTENTVIEWSUBSCRIBER responsable de la conversion de ce tableau en l'objet de réponse correct. Il le fait en utilisant un MainContentRendrerer spécifique sélectionné dans la phase de négociation du format discuté précédemment. Bien que certains de ces rendus soient déjà disponibles, le rendu par défaut utilisé est HTMLRenderer.

htmlRenderer

Étant donné qu'il s'agit du type de rendu de contenu principal le plus utilisé, examinons de plus près comment il construit la page.

Une chose cool dans ce processus est le concept de variation de page. Cela signifie que le HTMLRenderer envoie un événement qui est responsable de la découverte du type de page à utiliser pour envelopper le tableau de rendu de contenu principal: RendeRevents :: SELECT_PAGE_DISPlay_variant. Par défaut, SimplePageVariant est utilisé à moins que le module de blocage ne soit activé. Dans ce cas, BlockPageVariant commencera et permettra de placer des blocs dans la zone autour du contenu principal. Si vous le souhaitez, vous pouvez vous abonner à cet événement dans votre propre module et fournir votre propre variation.

Tout cela se produit dans la méthode PREEPLA () de HtmlRenderer, qui fournit une méthode #Type = & gt; «Page» pour RenderResponse () qui enveloppe le tableau de contenu principal. Les deux derniers sont enveloppés dans le tableau de rendu #Type = & gt; La chaîne HTML générée est ajoutée à l'objet de réponse et retournée au contrôleur frontal.

Bien qu'il s'agisse d'un aperçu de très haut niveau du processus, c'est essentiellement ce qui s'est passé. Maintenant, nous avons un objet de réponse, ce qui signifie que le noyau peut expédier son événement Kernel.Response. Après cela, le contrôleur frontal peut renvoyer la réponse directement à l'utilisateur et terminer le processus.

Conclusion

Dans cet article, nous avons exploré en interne Drupal 8 (et Symfony2) en suivant les réponses des demandes de l'utilisateur aux rendements du serveur. Nous avons vu comment Drupal 8 tire parti des composants Httpkernel et HttpFoundation Symfony2, et comment il se trouve essentiellement au-dessus de ces composants. De plus, nous voyons comment l'adhésif entre eux est composé d'événements envoyés par des noyaux, à laquelle Drupal s'abonne pour toutes ses fonctionnalités. Enfin, nous avons vu comment construire et retourner des pages HTML à l'utilisateur à l'aide du pipeline de rendu.

Je crois que la compréhension de ce qui se passe dans les coulisses de l'application Drupal 8 vous permettra de créer une excellente application en sachant exactement où accéder à ce processus. Je crois que si vous ne retirez qu'une chose de cet article, ce devrait être le mot flexibilité . Parce que la flexibilité pour construire ce dont nous avons besoin dans Drupal 8 est bien plus que tout dans Drupal 7. Il est en effet devenu moderne.

FAQ sur la structure interne de Drupal 8 (FAQ)

Quelle est la principale différence entre Drupal 7 et Drupal 8?

Drupal 8 introduit plusieurs changements majeurs par rapport à Drupal 7. Il a un nouveau moteur à thème appelé Twig, qui est plus sûr et plus flexible. Drupal 8 est également plus adapté aux mobiles et comprend plus de champs intégrés. Il prend mieux les sites multilingues avec une gestion du langage et un support de traduction améliorés. De plus, Drupal 8 s'intègre mieux aux plates-formes tierces en raison de l'utilisation généralisée de composants symfony.

drupal 8 Comment gérer les demandes et les réponses?

Drupal 8 Utilisez le composant Symfony Httpkernel pour gérer les demandes et les réponses. Lorsqu'une demande est faite, Drupal 8 crée un objet de demande et le transmet au httpkernel. Httpkernel utilise ensuite le système de routage pour déterminer quel contrôleur doit traiter la demande. Le contrôleur traite la demande et renvoie un objet de réponse, que Httpkernel renvoie au client.

Quel est le rôle du système de routage dans Drupal 8?

Le système de routage de Drupal 8 est responsable de la cartographie de l'URL vers un contrôleur spécifique. Il utilise la définition de routage fournie par le module pour déterminer quel contrôleur doit gérer la demande donnée. Le système de routage prend également en charge le routage dynamique, qui peut être modifié en fonction de l'état du système.

Comment fonctionne le système de thème de Drupal 8?

Le système de thème de Drupal 8 utilise des brindilles, un moteur de modèle flexible et sécurisé. Le sujet de Drupal 8 se compose d'un fichier .info.yml (fournissant des métadonnées sur le sujet) et d'un fichier de modèle de brindille (définissant la sortie HTML). Le système de thème prend également en charge l'héritage des modèles, permettant aux thèmes d'étendre et d'écraser des modèles à partir d'autres thèmes ou modules.

Comment développer des modules personnalisés dans Drupal 8?

Développer un module personnalisé dans Drupal 8 comprend la création d'un fichier .info.yml pour fournir des métadonnées sur le module et un fichier .module pour contenir le code PHP du module. Le module peut également contenir d'autres fichiers, tels que le routage des fichiers qui définissent les itinéraires et les fichiers de service qui définissent les services. Drupal 8 utilise des composants de programmation et de symfony orientés objet pour faciliter l'écriture réutilisable et testable.

Quels sont les avantages de l'utilisation de Drupal 8 pour le développement Web?

Drupal 8 offre de nombreux avantages pour le développement Web. Il utilise des composants Symfony pour le rendre plus puissant et plus flexible. Il prend en charge la conception réactive hors de la boîte, ce qui facilite la création d'un site Web adapté aux mobiles. Drupal 8 améliore également le support multilingue, de meilleures capacités de référencement et une interface de gestion plus conviviale.

drupal 8 Comment gérer les interactions de la base de données?

Drupal 8 utilise l'API de la base de données pour gérer les interactions de la base de données. L'API de la base de données fournit une couche d'abstraction au-dessus de SQL, permettant aux développeurs d'écrire des requêtes de base de données sans avoir à comprendre les détails du moteur de base de données sous-jacent. Il prend également en charge la gestion dynamique des requêtes, des transactions et des schémas.

Quel est le rôle du planificateur d'événements dans Drupal 8?

Le planificateur d'événements dans Drupal 8 est utilisé pour gérer les événements et les auditeurs d'événements. Lorsqu'un événement se produit, le planificateur d'événements informe tous les auditeurs enregistrés, qui peuvent ensuite agir. Cela permet aux modules d'interagir les uns avec les autres de manière découplée.

drupal 8 Comment gérer le cache?

Drupal 8 a un système de cache complexe qui aide à améliorer les performances. Il prend en charge plusieurs backends mis en cache, y compris les backends basés sur la base de données, les fichiers et la mémoire. Drupal 8 a également un système de balise de cache qui permet une défaillance à grain fin des données mises en cache.

Comment prolonger la fonctionnalité de Drupal 8?

La fonctionnalité de Drupal 8 peut être étendue à travers des modules et des thèmes. Les modules ajoutent de nouvelles fonctionnalités ou modifient les fonctionnalités existantes, tandis que les thèmes contrôlent l'apparence du site. Drupal 8 prend également en charge les plug-ins qui permettent l'échange de fonctionnalités, ainsi que des services, et fournissent des fonctionnalités réutilisables qui peuvent être injectées dans d'autres parties du système.

Cette sortie révisée maintient la signification d'origine pendant que les phrases et les paragraphes de reformularité, évitant la copie directe.

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 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