Nouvelle approche des hooks dans Drupal 11 : explications et exemples

- Publié 30/12/2025 - 16:58, mis à jour à 20/01/2026 - 16:44 Drupal

Article rédigé par Brahim - Lead Développeur Drupal

 

Dans l'écosystème Drupal, les hooks représentent l'un des mécanismes les plus puissants pour personnaliser et étendre les fonctionnalités du CMS. Que vous soyez développeur débutant ou expérimenté, comprendre comment implémenter correctement les hooks est essentiel pour créer des modules robustes et maintenables.

 

1. Qu'est-ce qu'un Hook Drupal ?

Un hook est un point d'entrée qui permet aux modules d'altérer ou d'étendre le comportement de Drupal Core ou d'autres modules. En implémentant des hooks, vos modules peuvent intervenir à différents moments du flux d'exécution de Drupal pour modifier des données, réagir à des événements ou fournir de nouvelles informations.

 

1. Anatomie d'un Hook

Chaque hook possède trois composants principaux :

  • Nom : Commence toujours par hook_ dans la documentation (ex: hook_form_alter)
  • Définition : Spécification officielle expliquant quand le hook est appelé, quels paramètres il reçoit et ce qu'il doit retourner
  • Implémentation : Votre code personnalisé qui s'exécute lorsque le hook est déclenché

 

2. Les Deux Méthodes d'Implémentation

1. Méthode Procédurale (Fonctions Globales)

Approche traditionnelle utilisant des fonctions nommées selon une convention spécifique :

// Dans votre fichier mymodule.module

function mymodule_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id): void {
 
// Votre code personnalisé ici
 
if ($form_id == 'user_register_form') {
   
$form['email']['#description'] = 'Entrez un email valide !';
 }
}

 

2. Méthode Orientée Objet avec Attributs ( Drupal 11.1+)

Nouvelle approche a été introduite depuis la sortie de la version 11.1 qui  utilisent des méthodes de classe avec attributs :

<?php
namespace
Drupal\mymodule\Hook;

use
Drupal\Core\Form\FormStateInterface;
use
Drupal\Core\Hook\Attribute\Hook;

class FormHooks {
 /**
  * Implements hook_form_alter().
  */
 #[Hook(
'form_alter')]
 
public function formAlter(&$form, FormStateInterface $form_state, $form_id): void {
   // Votre code personnalisé ici
   
if ($form_id == 'user_register_form') {
     
$form['email']['#description'] = 'Entrez un email valide !';
   }
 }
}

 

3. Guide Pas à Pas pour Implémenter un Hook

1. Méthode Procédurale

  1. Localisez la documentation du hook dans les fichiers .api.php
  2. Copiez la définition de fonction dans votre fichier .module
  3. Renommez la fonction en remplaçant hook_ par le nom machine de votre module
  4. Ajoutez votre code personnalisé

 

2. Méthode Orientée Objet (Drupal 11.1+)

  1. Localisez la documentation du hook
  2. Créez une classe dans src/Hook/ (ou utilisez une existante)
  3. Copiez la définition comme méthode et convertissez-la en camelCase
  4. Ajoutez l'attribut #[Hook] avec le nom du hook
  5. Implémentez votre logique métier

 

4. Types de Hooks et Exemples

1. Hooks d'Information

Fournissent de nouvelles informations à Drupal :

<?php

namespace
Drupal\mymodule\Hook;

use Drupal\Core\Hook\Attribute\Hook;
use Drupal\Core\Url;

/**
* Hook implementations for mymodule.
*/
class MymoduleHooks {

 
/**
  * Implements hook_toolbar().
  */
 #[Hook(
'toolbar')]
 
public function toolbar(): array {
   
return [
     
'my_link' => [
       
'#type' => 'link',
       
'#title' => 'Mon Lien',
       
'#url' => Url::fromRoute('mymodule.route'),
     ],
   ];
 }
}


 

2. Hooks d'Altération (Alter)

Modifient les données existantes :

<?php

namespace
Drupal\mymodule\Hook;

use Drupal\Core\Hook\Attribute\Hook;
use Drupal\Core\Form\FormStateInterface;

/**
* Hook implementations for mymodule.
*/
class MymoduleHooks {
 
/**
  * Implements hook_form_alter().
  */

 #[Hook(
'form_alter')]
 
public function formAlter(array &$form, FormStateInterface $form_state, string $form_id): void {
   
if ($form_id === 'user_register_form') {
     
$form['email']['#description'] = 'Email valide requis !';
   }
 }
}

 

3. Hooks d'Action

Réagissent aux événements système :

 

<?php

namespace Drupal\mymodule\Hook;

use Drupal\Core\Hook\Attribute\Hook;

/**
* Hook implementations for mymodule.
*/
class MymoduleHooks {

 
/**
  * Implements hook_cron().
  */
 #[Hook(
'cron')]
 
public function cron(): void {
   \
Drupal::logger('mymodule')->info('Cron exécuté !');
 }
}


 

5. Bonnes pratiques et outils

  • Toujours consulter la documentation du hook avant l'implémentation
  • Utilisez le module Devel et la commande drush fn-hook pour explorer les implémentations existantes
  • Privilégiez l'approche orientée objet pour les nouveaux développements sous Drupal 11.1+
  • Respectez l'ordre d'exécution : Drupal exécute les hooks par poids module puis par ordre alphabétique

 

6. Conclusion

Les hooks demeurent le fondement de l'extensibilité de Drupal. Avec l'introduction des attributs dans Drupal 11.1, les développeurs disposent maintenant d'approches plus modernes et maintenables pour implémenter ces mécanismes puissants. Quelle que soit la méthode choisie, la maîtrise des hooks est indispensable pour tout développeur Drupal souhaitant créer des solutions robustes et évolutives.

 


Vous avez des questions sur votre projet Drupal ?
> Contactez un expert Drupal

Partagez toute l'actualité

Partagez sur Facebook Partagez sur Twitter Copier le lien

À la une

Découvrir plus de workshop technologiques

Image
Actency - Réassurance  - 7 Agences et Bureaux en France
7 Agences & Bureaux
en France
150 Experts
Image
Actency - Réassurance  - 150 experts
+1 200 Projets
Image
Actency - Réassurance - Contributeur et conférencier Drupal en Europe
Contributeur Et conférencier Drupal en Europe
11 500 Jours/hommes par an
Image
Actency - Réassurance - 11500 jours hommes par an
Nous contribuons aux évolutions et aux conférences Drupal en Europe
Image
Actency - Drupal - DrupalCon
Image
Actency - Événements - Paris OpenSource Summit
Image
Actency - Événements - IT & IT Security Meetings
Image
Actency - Événements - DrupalCamp 2020