Sa fiabilité et maturité
Symfony jouit d'une solide réputation comme l'un des frameworks PHP les plus fiables et les plus aboutis.
Publié le 18/04/25
Depuis Drupal 8, Drupal a entamé une véritable mutation architecturale. L'époque du CMS monolithique codé en PHP procédural, peu structuré est terminée. En s'appuyant sur les composants Symfony, Drupal a adopté une structure moderne basée sur l'injection de dépendances, le routage explicite, les services, les événements et la testabilité.
Cette hybridation n'est pas qu'une modernisation technique : elle ouvre le CMS à une échelle d’usage bien plus large, jusqu'à devenir un framework applicatif pour les projets sur-mesure complexes.
Drupal est un système de gestion de contenu PHP et open source. Il alimente plus de 1,7 millions de site web.1
Bien que les statistiques affichent une part de marché globale plus faible que pour les autres CMS (Wordpress, Joomla, Wix..), Drupal détient un peu plus de 6% des 10 000 sites les plus importants1. Certains gouvernements comme la France et l’Australie, la commission Européenne, l’UNESCO, la SNCF et même Tesla l’utilisent.
Symfony c’est un framework PHP open-source. Pour faire simple, c’est comme une grande « boite à outils », il regroupe de nombreux composants qui facilitent le développement des sites ou applications web.
C’est l’un des framework PHP les plus populaires et puissant sur le marché. Le nombre de téléchargement de ses composants a dépassé les 29 milliards2.
Symfony a rejoint Drupal depuis sa version 8 en 2015 avec Symfony 3. Aujourd'hui, Drupal 11 utilise Symfony 7.
Symfony jouit d'une solide réputation comme l'un des frameworks PHP les plus fiables et les plus aboutis.
Symfony, c’est surtout une collection de composants PHP découplés et interopérables, conçus selon les standards PSR.
Il permettre aux développeurs de sa communauté de développer plus rapidement, inutile de réinventer la roue et invite à la normalisation des bonnes pratiques.
Il est largement testé et maintenu par une grande communauté. Ce qui lui permet d’avoir une excellente documentation.
Symfony est l'un des rares frameworks bénéficiant d'un soutien commercial.
C’est bien beau toutes ces explications, mais pour un développeur ça se traduit comment ?
Drupal exploite par exemple les composants Symfony suivant :
Certains autres composants comme Twig et Doctrine ne sont pas mentionnés mais sont une grande avancée pour Drupal.
Symfony étant basé sur la POO et les standards PHP modernes (PSR, namespace, autoloading..), Drupal a abandonné son vieux modèle procédural pour des classes plus claires et organisées. Cela permet d’être beaucoup plus flexible, testable et plus maintenable. Le cœur de Drupal est devenu plus modulaire et interopérable.
Le système de routage est beaucoup plus puissant et lisible. Il permet de lier une URL à un contrôleur tout en gérant les permissions, le format de réponse.
Exemple de route :
my_module.index:
path: '/my-path'
defaults:
_controller: '\Drupal\my_module\Controller\MyController::index'
requirements:
_permission: 'access content'
Au lieu d’utiliser les hook procéduraux, on peut désormais écouter proprement des évènements (et en créer). Un module peut se brancher à n’importe quel moment du cycle de vie d’une requête grâce à l’EventSubscriberInterface. Les modules deviennent moins couplés, plus lisibles et plus facilement testables.
Cependant, il est important de comprendre que les hook procéduraux sont encore utilisés pour certains fonctionnements natifs de Drupal (altération d’un formulaire, préprocesseur de thème par exemple).
Symfony fonctionne avec des containers de services. Les classes dépendent les unes des autres grâce à l’injection de dépendances.
On peut alors injecter des services dans les contrôleurs, formulaires, plugins etc. Cela rend le code beaucoup plus modulaire, testable.
Les fonctionnalités n’ont donc plus rien à faire dans le fichier .module ancestral de Drupal et peuvent être organisées dans des services. On peut très bien utiliser n’importe quel Design Pattern selon le besoin.
L’injection de dépendances rend le code plus maintenable, modulaire et extensible. Le code est plus lisible pour les développeurs, les dépendances sont visibles dès le constructeur. On n’a plus besoin de se préoccuper de la durée de vie des objets, c’est le conteneur Symfony qui gère ça comme un grand.
Exemple d’instanciation d’un service dans un fichier: my_module.services.yml
services:
my_module.my_service:
class: Drupal\my_module\Service\MyService
arguments: [‘@logger.factory']
Example d’implémentation du service dans une classe:
public function __construct(
public readonly MyService $myService
) {}
Fini les *.tpl.php procéduraux, fini le code PHP spaghetti dans les templates ! Place au Twig permettant une meilleure lisibilité, maintenabilité et héritage de templates.
Mais ce n’est pas tout ! Le PHP n’est plus permis dans les templates, on améliore donc la sécurité. Il y a une vraie volonté de séparer la logique et le HTML, pour le plus grand bonheur des développeurs back-end !
Spoiler Alert : On peut tout de même créer des fonctions Twig grâce au TwigExtension afin d’ajouter une légère logique tout en respectant la séparation logique/template. Attention tout de même à limiter ses usages pour éviter l’usine à gaz. Ces fonctions ne doivent pas remplacer les preprocess(), contrôleurs ou plugins. Les templates ne doivent faire que de l’affichage.
Grâce à Symfony, Drupal a repensé son système de gestions des entités en utilisant certains composants de Doctrine. Drupal n’utilise pas l’ORM car ses entités sont dynamiques et ne sont pas mappés de manière rigide à des classes/tables et certaines entités ne sont pas en base de données mais plutôt des configurations YAML. Cependant, il a son propre mini-ORM en utilisant EntityAPI. Drupal propose donc une version inspirée des idées modernes de Doctrine mais à sa sauce :
$node = $this->entityTypeManager
->getStorage(‘node’)->load(42);
$title = $node->getTitle();
Ou requête via l’EntityQuery :
$nids = $this->entityTypeManager
->getQuery
->condition('status', 1)
->execute();
Concrètement, c’est orienté objet, typé, injectable et étendus par les plugins MAIS, ce n’est pas Doctrine ORM.
De plus, la rigueur structurelle apportée par Symfony permet de mieux profiler, optimiser et segmenter les responsabilités :
Les composants de Symfony ont été conçus dans un souci d’efficacité, Drupal a considérablement progressé en terme de performance grâce à ces composants.
L'intégration de Symfony dans Drupal n’est pas juste une mise à jour d’une majeur, c’est un changement de paradigme qui transforme le CMS en une base applicative moderne, extensible, testable et alignée avec les nouveaux standards PHP. Pour les projets plus complexes et spécifiques, cette architecture hybride est un véritable levier de qualité, de robustesse et d’évolutivité. Elle permet aussi de faire converger les compétences Symfony et Drupal dans une même équipe tech.
Là où il n’était pas possible de faire du headless avec Drupal, aujourd’hui tout est possible. Le site sur lequel vous lisez cet article est réalisé en Drupal headless !
Nos projets et notre expertise vous intéressent ? Et si nous en discutions ?
Votre navigation inspire notre IA pour vous proposer des contenus sur mesure.
Pour l’éco-conception, modérons son utilisation.