Création d'une page dans un module Drupal de manière programmatique
Il y a deux étapes pour créer une page simple dans Drupal :
Déclarez le chemin et ses paramètres.
Cette étape inclut le titre de la page, les exigences d'accès à la page, etc.
Dans Drupal 7, vous deviez implémenter hook_menu().
Dans Drupal 8, créez un fichier <nom_module>.routing.yml dans le répertoire du module à la racine.
Écrivez le code pour retourner le contenu de la page.
Dans Drupal 7, vous deviez écrire une fonction callback de page, indiquée dans hook_menu().
Dans Drupal 8, le callback de la page doit être soit une méthode d'une classe, soit un service enregistré. Il peut différer selon diverses conditions (HTTP ou HTTPS, en-têtes de contenu, etc.), mais cela dépasse le cadre de cette introduction.
Parcours
En suivant l'exemple de cette page, vous pourrez créer une page simple dans votre module personnalisé sans apprendre davantage sur les internals de Drupal. Pour plus d'informations, consultez la note de changement concernant le système de routage et les différentes implémentations dans le core et les projets exemples.
Fichier YAML de routage pour le module exemple
Les informations de routage sont stockées dans example/example.routing.yml :
example.my_page: path: '/mypage/page' defaults: _controller: '\Drupal\example\Controller\ExampleController::myPage' _title: 'Ma première page dans D8' requirements: _permission: 'access content'
example.my_page
- C'est le nom machine de la route. Par convention, les noms machine des routes doivent être module_name.sous_nom. Quand d'autres parties du code doivent référencer la route, elles utilisent ce nom machine.
path
- Il définit le chemin vers la page sur votre site. Notez le slash initial (/).
defaults
- Il décrit le callback de la page et le titre. @todo : Où ces valeurs par défaut peuvent-elles être surchargées ?
requirements
- Il définit les conditions sous lesquelles la page sera affichée. Vous pouvez spécifier des permissions, des modules qui doivent être activés, et d'autres conditions.
Implémentation de la page pour le module exemple
La classe Controller ExampleController doit être définie dans example/src/Controller/ExampleController.php :
<?php namespace Drupal\example\Controller; use Drupal\Core\Controller\ControllerBase; /** * Fournit les réponses des routes pour le module Example. */ class ExampleController extends ControllerBase { /** * Retourne une page simple. * * @return array * Un tableau rendu simple. */ public function myPage() { $element = array( '#markup' => 'Bonjour, monde', ); return $element; } }
namespace
- Ici, on déclare le préfixe nécessaire pour définir complètement le nom de la classe que nous définissons. Comparez le bloc de documentation et le nom de la classe. L'autoloader sait que pour trouver la classe \Drupal\example\Controller\ExampleController, il doit chercher le fichier modules/example/src/Controller/ExampleController.php.
use
- Cela nous permet d'utiliser ControllerBase au lieu du nom complet. Cela rend la déclaration de classe beaucoup plus lisible.
myPage()
- La méthode référencée dans le fichier YAML doit être publique. Elle doit retourner un tableau renderable.