Maison > développement back-end > tutoriel php > Créez un module Drupal 8: routage, contrôleurs et liens de menu

Créez un module Drupal 8: routage, contrôleurs et liens de menu

尊渡假赌尊渡假赌尊渡假赌
Libérer: 2025-02-21 09:45:10
original
194 Les gens l'ont consulté

Build a Drupal 8 Module: Routing, Controllers and Menu Links

Points de base

  • DRUPAL 8 passe de la programmation procédurale à l'architecture orientée objet et intègre le code d'autres sources par le biais du programme fièrement trouvé ailleurs, y compris des ajouts importants tels que les composants Symfony.
  • La création d'un module Drupal 8 nécessite de définir la structure du dossier et les fichiers nécessaires, tels que .info.yml fichiers. Les dossiers personnalisés et des modules de contribution sont désormais directement sous le répertoire racine modules/, et le code de base est déplacé vers un dossier séparé core/.
  • "routage" dans Drupal 8 remplace la fonction hook_menu() dans Drupal 7, en tirant parti du composant Symfony2. Cela implique de définir l'itinéraire comme une configuration et de gérer la fonction de rappel dans le contrôleur. Le fichier de routage du module demo.routing.yml est créé dans le dossier racine du module.
  • Le lien de menu n'est plus traité via hook_menu(), mais est déclaré comme une configuration dans le fichier yml. Créez un fichier nommé demo.menu_links.yml dans le répertoire racine du module pour définir le lien de menu et son emplacement dans le menu existant du site.

Notez que puisque Drupal 8 est toujours en développement au moment de la rédaction, une partie du code peut être obsolète. Veuillez vous référer à la base de code que j'ai essayé de mettre à jour l'exemple de code et de le rendre compatible avec la dernière version Drupal 8.

Drupal 8 introduit de nombreux changements, cherchant à l'aligner avec d'autres cadres PHP modernes. Cela signifie que l'ancienne programmation procédurale de style PHP 4 a été largement remplacée par une architecture orientée objet. Pour y parvenir, dans le cadre du programme fièrement trouvé ailleurs, Drupal 8 contient du code qui n'est pas spécifiquement développé pour Drupal.

L'un des ajouts les plus importants à Drupal est la composante Symfony, qui a deux impacts majeurs sur les développeurs de Drupal. Premièrement, il a le potentiel d'augmenter considérablement le nombre de développeurs qui souhaitent se développer pour Drupal maintenant. Deuxièmement, il a laissé certaines préoccupations à certains développeurs de Drupal 7 qui manquent d'expérience de pratique PHP moderne. Mais ça va, nous apprenons tous, l'expérience que nous avons apprise des cadres comme Symfony (et, espérons-le, Drupal 8) sera facilement étendu et appliqué à d'autres cadres PHP.

Pendant ce temps, Drupal 8 est dans les stades tardifs de son cycle de publication, avec la version actuelle au moment de la rédaction d'Alpha11. Nous utiliserons cette version pour présenter quelques changements de base dans le développement de modules que les développeurs Drupal 7 rencontreront d'abord et devraient être familiers avec. J'ai configuré une base de code GIT où vous pouvez trouver le code que j'ai écrit dans cette série, et si vous préférez, vous pouvez suivre et apprendre comme ça.

Comment créer un module?

La première chose sur laquelle nous devons nous concentrer est de définir les structures et les fichiers de dossiers nécessaires afin que Drupal 8 puisse comprendre nos nouveaux modules. Dans Drupal 7, nous devons créer au moins deux fichiers (.info et .module), mais dans Drupal 8, la version YAML de l'ancienne est suffisante. Oui, le fichier .info est désormais remplacé par le fichier .info.yml, contenant des données similaires, mais avec différentes structures.

Un autre grand changement est que les dossiers personnalisés et des modules de contribution vont désormais directement dans le dossier Root Directory modules/. En effet, tout le code de base a été déplacé dans son propre dossier core/ séparé. Bien sûr, dans le répertoire modules/, il est recommandé de séparer les modules en Custom et contribution comme dans Drupal 7.

Créons un module appelé Demo (très original) et mettons-le dans le répertoire modules/custom/. Comme je l'ai mentionné, dans ce dossier demo/ nouvellement créé, nous avons d'abord besoin d'un fichier demo.info.yml contenant le contenu requis suivant:

name: Drupal 8 Demo module
description: 'Demo module for Drupal 8 alpha11'
type: module
core: 8.x
Copier après la connexion
Copier après la connexion

Vous devriez être familier avec trois des quatre paires de valeurs clés (nom, description et noyau). Le type est également une exigence maintenant, car vous pouvez également créer des fichiers YML pour le thème. Une autre chose importante à noter est que les espaces du fichier YML ont un sens et utilisent la bonne indentation pour organiser les données dans une structure de type tableau.

Vous pouvez afficher cette page de document pour des paires de valeurs clés supplémentaires qui peuvent être ajoutées au fichier module .info.yml et des instructions pour annoncer des modifications à ce format.

C'est comme ça, un fichier. Vous pouvez désormais naviguer vers la page Extensions, localiser le module de démonstration et l'activer.

Comme je l'ai mentionné, avant d'activer le module, nous n'avons plus besoin de créer un fichier .module. Architectural parlant, la taille du fichier .module sera considérablement réduite, car la plupart de la logique commerciale sera déplacée vers les classes de service, les contrôleurs et les plugins, mais nous en verrons certains plus tard.

Qu'est-ce que le "routage", et que se passe-t-il avec ses fonctions de rappel? hook_menu()

Dans Drupal 7,

est probablement le crochet le plus implémenté car il est utilisé pour définir les chemins de Drupal et connecter ces chemins à la fonction de rappel. Il est également responsable de la création de liens de menu et de nombreux autres contenus. hook_menu()

Dans Drupal 8, nous n'avons plus besoin de

parce que nous utilisons fortement les composants Symfony2 pour gérer le routage. Cela implique de définir l'itinéraire comme une configuration et de traiter la fonction de rappel dans le contrôleur (une fonction de la classe de contrôleur). Voyons comment faire cela en créant une page simple qui produit Hello World classique !. hook_menu()

Tout d'abord, nous devons créer un fichier de routage nommé

pour notre module. Ce fichier est situé dans le dossier racine du module (adjacent à demo.routing.yml). Dans ce fichier, nous pouvons avoir la définition de route (simple) suivante: demo.info.yml

name: Drupal 8 Demo module
description: 'Demo module for Drupal 8 alpha11'
type: module
core: 8.x
Copier après la connexion
Copier après la connexion

La première ligne marque le début de la création d'une nouvelle route appelée démo pour la démo du module (le premier est le nom du module et le second est le nom de la route). Sous Chemin, nous spécifions le chemin d'accès pour s'inscrire à cette route. Sous par défaut, nous avons deux choses: le titre de page par défaut (_title) et _content, qui fait référence à une fonction sur la classe Democontroller. Sous les exigences, nous spécifions les autorisations que l'utilisateur doit avoir pour afficher la page. Vous devez consulter cette page de documentation pour plus d'options que ce fichier de routage peut avoir.

Maintenant, créons notre premier contrôleur appelé DemoController, qui appellera une fonction appelée Demo () lorsque l'utilisateur demande cette page.

Dans le répertoire du module, créez un dossier nommé SRC / et créez un dossier nommé contrôleur /. Ce sera là que la classe de contrôleur sera stockée. Continuez à créer le premier: DemoController.php.

Le contrôleur et les autres classes que nous verrons plus tard dans le dossier SRC / font partie de la norme PSR-4. Initialement, nous avons dû créer une structure de dossiers plus grande (norme PSR-0), mais il y a maintenant une phase de transition où les deux fonctionnent. Donc, si vous voyez toujours le code placé dans un dossier appelé lib /, c'est PSR-0.

Dans notre fichier DemoController.php, nous pouvons maintenant déclarer notre classe:

demo.demo:
  path: '/demo'
  defaults:
    _content: '\Drupal\demo\Controller\DemoController::demo'
    _title: 'Demo'
  requirements:
    _permission: 'access content'
Copier après la connexion

C'est la quantité la plus simple et la moins à faire pour afficher quelque chose sur la page. En haut, nous spécifions l'espace de noms de classe, ci-dessous, nous déclarons la classe.

Dans la classe DemoController, nous n'avons que la fonction démo (), qui renvoie un tableau rendu similaire à Drupal 7. Ce n'est pas grave. Tout ce que nous avons à faire maintenant est d'effacer le cache et de naviguer vers le https://www.php.cn/link/1a4a5f89e71e4bb99733355c964a950b4 Drupal Page avec bonjour le monde .

Où est le lien de menu?

Dans Drupal 7, lorsque nous implémentons hook_menu(), nous pouvons également ajouter le chemin enregistré au menu pour afficher le lien de menu sur le site. Encore une fois, il n'est plus géré avec ce crochet, mais définit plutôt le lien de menu comme une configuration à l'aide du fichier YML.

Voyons comment créer un lien de menu qui apparaît dans le menu "Structure" géré. Tout d'abord, nous devons créer un fichier nommé demo.menu_links.yml dans le répertoire racine du module. Dans ce fichier YML, nous définirons le lien de menu et son emplacement dans le menu existant du site. Pour atteindre les objectifs que nous nous fixons, nous avons besoin de ce qui suit:

<?php
/**
 * @file
 * Contains \Drupal\demo\Controller\DemoController.
 */

namespace Drupal\demo\Controller;

/**
 * DemoController.
 */
class DemoController {
  /**
   * Generates an example page.
   */
  public function demo() {
    return array(
      '#markup' => t('Hello World!'),
    );
  }
}
Copier après la connexion

Nous avons encore une fois une structure YML basée sur un retrait où nous définissons d'abord le nom de la machine (démo) du lien de menu pour la démo du module (comme nous l'avons fait avec le routage). Ensuite, nous avons le titre et la description du lien, suivis du parent de ce lien (où il doit être placé) et de l'itinéraire qu'il doit utiliser.

La valeur de

le parent est le lien de menu parent (joignez son module) et pour le trouver, vous devez faire un peu de creusement dans le fichier * .meu_links.yml. Je sais que le lien "Structure" est défini dans le module System Core, donc en regardant le fichier System.Menu_links.yml, je peux déterminer le nom de ce lien.

Route_name est le nom de la machine de l'itinéraire que nous voulons utiliser pour ce lien. Nous avons déjà défini le nôtre. Avec cela, vous pouvez effacer le cache et naviguer vers le https://www.php.cn/link/6c2665d7c3ed1e5bfd8ba600f026eb55 Demo / path. bien.

Conclusion

Dans cet article, nous commençons à explorer le développement des modules dans Drupal 8. À ce stade (version Alpha11), il est temps de commencer à apprendre à utiliser les nouveaux modules de contribution de l'API et du port. Pour ce faire, j'écris mon exploration de ce nouveau cadre passionnant (Drupal 8) afin que nous puissions tous découvrir ces changements et entrer dans le travail immédiatement lorsque le jour de la sortie arrive.

Tout d'abord, nous avons appris certaines bases: comment démarrer le module Drupal 8 (fichiers, structures de dossiers, etc.) et le comparer à Drupal 7. Nous avons également appris à définir un itinéraire et une classe de contrôleur, et comment appeler une fonction via cette voie. Enfin, nous voyons comment créer un lien de menu qui utilise l'itinéraire que nous avons défini.

Dans le prochain tutoriel, nous continuerons à construire ce module et à découvrir d'autres nouvelles fonctionnalités cool que Drupal 8 utilise. Nous apprendrons à créer des blocs et à utiliser les formulaires et à configurer le système. Rendez-vous alors.

FAQ sur la construction de modules Drupal 8 (FAQ)

Quelle est la structure de base du module Drupal 8?

Le module Drupal 8 est essentiellement un ensemble de fichiers contenant certaines fonctions et est construit de manière spécifique. La structure de base comprend un fichier

(fournissant des métadonnées sur le module), un fichier .info.yml (y compris le code PHP) et d'autres fichiers facultatifs tels que .module, .css, .js, etc. Fonction de fixation. .twig Les fichiers sont obligatoires, qui définissent le nom, la description, le package, le type, le noyau et les dépendances du module. .info.yml

Comment fonctionne le système de routage dans Drupal 8?

Le système de routage de Drupal 8 est responsable de la cartographie de l'URL vers une classe de contrôleur spécifique. Il utilise le composant de routage de Symfony, qui permet des systèmes flexibles et puissants. Le système de routage utilise le fichier

pour définir des itinéraires avec des noms, des chemins de main uniques, des valeurs par défaut et des exigences. La valeur par défaut spécifie généralement la classe de contrôleur responsable de la gestion de la demande. routing.yml

Comment créer une page personnalisée dans Drupal 8?

La création d'une page personnalisée dans Drupal 8 implique de définir des itinéraires et des contrôleurs. L'itinéraire est défini dans le fichier

et mappe l'URL vers le contrôleur. Le contrôleur est une classe PHP qui renvoie un tableau rendu pour le contenu de la page. La classe de contrôleur doit être placée dans le répertoire routing.yml du module. src/Controller

Comment ajouter un lien de menu à ma page personnalisée Drupal 8?

L'ajout d'un lien de menu à votre page personnalisée implique la création d'un fichier links.menu.yml dans votre module. Ce fichier définit un lien de menu dont les propriétés incluent le titre, la description, le parent, le nom de l'itinéraire et le poids. Le nom de l'itinéraire doit correspondre au nom de route défini dans le fichier routing.yml.

Comment créer une forme dans Drupal 8?

La création d'une forme dans Drupal 8 implique la création d'une classe de formulaire qui étend la classe FormBase et implémente FormInterface. Cette classe définit les éléments de formulaire, la validation et le traitement de soumission. Le formulaire peut être affiché en le renvoyant du contrôleur.

Comment créer des blocs dans Drupal 8?

La création d'un bloc dans Drupal 8 implique la création d'une classe de bloc qui étend la classe BlockBase. Cette classe définit le contenu de bloc et d'autres propriétés. Les blocs peuvent être placés sur la page via l'interface de mise en page du bloc.

Comment créer un formulaire de configuration dans Drupal 8?

La création d'un formulaire de configuration implique la création d'une classe de formulaire qui étend la classe ConfigFormBase et implémente FormInterface. Cette classe définit les éléments de formulaire et gère le stockage et le chargement des données de configuration.

Comment créer une page d'administration dans Drupal 8?

La création d'une page administrative consiste à définir un itinéraire sous /admin et un contrôleur qui renvoie le contenu de la page. Des pages peuvent être ajoutées au menu d'administration en définissant un lien de menu avec un parent sous system.admin.

Comment créer un thème dans Drupal 8?

La création d'un sujet dans Drupal 8 implique la création d'un fichier .info.yml qui définit le nom, la description, le type, le noyau et les sujets de base. D'autres fichiers .twig, .css et .js peuvent être ajoutés pour définir des thèmes pour chaque élément.

Comment créer un type de champ personnalisé dans Drupal 8?

La création d'un type de champ personnalisé implique la création d'une classe de type de champ qui étend la classe FieldTypePluginBase. Cette classe définit les propriétés du champ et les méthodes de stockage, d'affichage et de traitement de formulaire. Les types de champs peuvent être utilisés pour les types de contenu, les utilisateurs, les commentaires et autres entités.

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