On a tous connu ce moment de solitude face à une demande client un peu trop spécifique.
Vous savez, ce moment où le service par défaut du cœur de Drupal fait 95% du travail, mais qu'il manque ce petit détail crucial pour le projet. La tentation est grande, surtout quand on débute, de copier-coller la classe entière dans un module custom, ou pire (ne mentez pas, on a les noms), de patcher directement le fichier source en se disant "je ferai ça proprement plus tard".
Soyons clairs : c'est la meilleure recette pour transformer une maintenance de routine en cauchemar lors de la prochaine mise à jour de sécurité.
Heureusement, si vous cherchez à surcharger un service Drupal proprement, l'architecture du CMS nous offre une solution élégante issue des design patterns orientés objet : le Drupal Service Decorator.
Au lieu de remplacer brutalement une classe ou de bidouiller des hooks à n'en plus finir, le décorateur nous permet d'envelopper un service existant pour en modifier la logique métier sans toucher à son intégrité. C’est propre, c’est pérenne, et c’est totalement intégré au conteneur de Drupal Dependency Injection.
Dans cet article, on va voir ensemble comment implémenter ce pattern pour altérer le comportement natif de Drupal sans jamais compromettre la stabilité de votre application. Vous allez voir, une fois qu'on a compris la mécanique du fichier services.yml, c'est un outil dont on ne peut plus se passer.
Partie 1 : Le concept (Promis, on fait court)
Avant d'ouvrir votre IDE, il faut bien visualiser ce que nous allons construire. Le Decorator Pattern n'est pas une invention spécifique à Drupal ; c'est un grand classique des Design Patterns (merci le Gang of Four) utilisé massivement dans le développement logiciel moderne.
Pour faire simple : imaginez des poupées russes.
Le service original de Drupal (celui que vous voulez modifier) est la petite poupée au centre. Votre Service Decorator, c'est la poupée plus grande qui vient englober la première.
Retrouvez mes autres articles sur dg-tech.dev
SOCIAL SHARE CARD GENERATOR