En Février 2019 je me suis rendu sur les conseils d'une amie développeuse au DrupalCamp Paris. Cet événement fût pour moi assez fondateur dans mon implication, toute récente et balbutiante, dans le monde de l'open source. C'était la première vraie convention de developpeur•se•s que je faisais depuis que j'avais commencé dans le monde du travail et je n'ai pas été déçu. En plus de découvrir un CMS que j'estime puissant bien que potentiellement bourré d'erreurs de conception, j'ai surtout rencontré un paquet de gens qui avaient la même envie commune, apprendre à se servir au mieux et surtout ensemble de l'outil technique autour duquel ils formaient une communauté, certes réduite, mais pleine de camaraderie et de bienveillance. Laissons là ma déclaration d'amour à la communauté des drupalistes et entrons dans le vif du sujet.
C'est en Novembre 2015 que Drupal saute enfin le pas de la programmation objet et par la même occasion intègre dans son core des composants de Symfony 2.8 (qui étaient pour certains déjà présents dans la version 7), en même temps que la release de celle ci et de la 3.0. Désormais Drupal profitera de la puissance des composants Symfony et plus important encore deviendra entièrement orienté objet, ce qui va bousculer pas mal d'habitudes de développement dans le monde du CMS à la goutte bleue. Pourtant ce changement d'architecture est relativement bien accueilli même si la courbe d'apprentissage, déjà pas mal raide, de Drupal devient à ce moment là une sorte d'ascension du K2 pour certain•e•s. Bref il y avait du taff à revendre surtout pour assurer les migrations vers les nouvelles versions du CMS. L'équipe de maintenance de du Core de Drupal a donc déidé de calquer son rythme de release sur celui de Symfony à l'avenir je vous raconte pas à quel point ça m'enthousiasme de voir deux technos que j'affectionne prendre un chemin commun...
Il n'est pas ici question d'effectuer une review exhaustive des capacités des components présents dans Drupal. Je n'ai ni l'expérience technique ni les connaissances théoriques pour en faire vraiment le tour, tout au plus je peux donner mon avis et mon ressenti sur ce que je pense être de vraies bonne avancées. Je ne m'attarderais d'ailleurs pas sur tous : il est bon de savoir que ces components existent dans Drupal pour les utiliser quand on en a l'utilité mais vous pouvez clairement build un site entier avec le CMS sans jamais en utiliser un seul.
Ce composant étant déprécié sur la version 4 de Symfony il sera retiré à terme de Drupal (ça commence bien) pour lui préférer optimisations de load de composer
Permet au projet tiers de Drupal, Drupal Console d'automatiser la génération de modules, des blocs, des entités etc... On va pas vraiment épiloguer sur à quel point c'est utile pour monter rapidement son appli ou son site.
Permet de convertir vos CSS selector en XPath sans avoir à les écrire dans son HTML. Sachant que Drupal est essentiellement orienté pour du site building et de la génération de HTML à partir des templates et des fichiers de conf, l'utilité d'un tel composant apparaît assez évidente pour les perfs.
Le composant qui permet la réutilisation de nos class dans le code, incluant donc les autre composants de Symfony.
La gestion des requêtes et des responses dans Drupal. L'objet Request est le même que dans Symfony et on peut donc opérer sur les paramètres de manière
Sans lui : pas de routage et pas de routage ça veut dire pas d'identification du controller auquel injecter l'objet Request manipulé par HTTPFoundation et donc... c'est naze !
Essentiel comme rôle dans la migration vers Drupal 9, il permet aussi de faire des coverage tests sur les différentes versions de PHP. Utile quand on veut savoir si un module contrib peut être ajouté à son site en production.
La fin des hooks dans Drupal ! Finito les hooks ! Maintenant on catch les Event et on agit sur le code quand quelque chose s'y passe vraiment. On est plus obligé de considérer aussi des étapes de preprocess et de postprocess, les objets et les variables sont manipulés quand on en a besoin.
Permet d'executer une commande via PhP et d'obtenir des retours, catcher les exceptions etc... On peut facilement le combiner avec eventDispatcher pour executer des process lors d'actions sur le serveur.
Drupal aime le JSON et s'oriente de plus en plus facilement vers un système d'administration de contenu headless. Pouvoir sérialiser proprement ses objets pour les envoyer à l'API qui va distribuer les données administrées dans le BO et tout ça en trois lignes de code...
Implémenter le module php Iconv pour internationaliser son site... c'était pas du luxe !<br/Ò> Avoir un outil de construction de traduction à l'intérieur du noyeau, non plus !
Pour valider les données envoyées.
Ça paraît bête dit comme ça mais quand y en avait pas avant c'était un peu le chaos.
Permet de parser les yaml et de les valider.
Aussi utile que le YAML est désagréable à manipuler !
Pour finir cet article je me permets ici de vous exposer ce que je pense être les prochains components à intégrer à l'intérieur du CMS. Il ne s'agit ici que de mon avis mais je pense que les quelques explications données seront suffisantes à vous faire comprendre en quoi ces intégrations apporteraient une grosse plus value à Drupal dans le futur. Je me pencherai peut être sur le sujet de manière active courant 2020-2021
Et si au lieu de devoir vider le cache quand on fait un changement dans un .js ou quand on change une image on les versionnait et que l'on puisse recharger si le hash de version a changé. Plus de soucis de scripts en cache, plus de vieilles images sans rapport avec le sujet, plus de changement de visuel ardu : le bonheur, c'est tout et c'est parfait
LE sujet qui fait que Drupal des fois c'est l'enfer. Tout repose tellement sur la conf en base que le CMS charge énormément d'info en cache pour économiser des accès en base.... mais et si on venait à écrire en conf alors qu'on naviguait ? Et si le cache devait être vidé pour une raison X ou Y ? Du bonheur je vous dit !
Gérer la conf c'est essentiel dans Drupal quand on a pas envie que les modules de dev soient envoyés en prod, le component Config gère tout ça. A terme plus besoin de cim et de cex : on définit à la manière de composer une conf de prod et une conf de dev et/ou de test et roule ! ET PLUS OBLIGÉ DE FAIRE ÇA EN YAML !
Gros chantier celui là ! Un des composants les plus puissants mais les plus casse gueule de Symfony. Intégrer ce monstre dans Drupal demanderait des efforts considérables mais en contrepartie les Form deviendraient "natifs" dans Drupal et donc moins de modules à intégrer et moins de modules pour gérer les options de ceux ci.
Pourrait à terme remplacer Guzzle en améliorant les perfs et le stream des Responses après tout pourquoi se priver de prendre ce qu'il se fait de mieux comme client HTTP ?
Un jour, peut être on aura juste à taper dans un projet Symfony:
‘composer req drupal/drupal’
et l'on aura une appli directement administrable.
Voilà, j'espère que ça vous aura plu, que vous soyez Symfoniste ou Drupaliste ou juste curieux.
Merci pour votre lecture.