Comme en témoigne mon petit module hello world, l’API et l’architecture de Drupal 8 sont autrement plus complexe que celle de Drupal7.
Tout programmeur est amené a se poser la question : si je me trompe, comment vais-je debugger mon code ?
Drupal 7 se base sur certains principes fondamentaux simples et universel : les hooks (qui sont des sortes de callbacks améliorées, reproduisant en PHP une forme d’AOP), les tableaux associatifs (et rarement des objets). La plupart des cas sont réglés par un bon vieux « dsm » (du module « devel » qui reste toujours présent dans Drupal 8) qui permet d’afficher le contenu de n’importe quelle variable, façon « krumo » :
Si cette méthode reste valable en Drupal 8, elle peut se révéler trop rudimentaire. Quand on se trompe de nom de classe à hériter ou d’annotation, un dsm ne nous sauvera pas. Il va nous falloir d’autres outils. Je vous en présentes ici les plus utiles.
Composer mananger
Pour l’installer il y a plusieurs étapes :
drush en -y composer_manager drush composer-manager-init cd core composer drupal-update
Permet de lister les packages installés et leurs versions.
- Composer Manager for Drupal 8
- https://www.acquia.com/blog/5-php-components-every-drupal-8-developer-should-know-part-1-composer
- https://www.acquia.com/blog/composer-dependency-management-php explications
- https://www.acquia.com/blog/using-composer-manager-get-island-now
Pour rentrer dans les entrailles de la bête :
vim core/vendor/composer/autoload_classmap.php
Quelques articles sur les problèmes de dépendances (quand 2 composants dépendent de 2 versions différentes d’une même librairie):
- https://drupalcommerce.org/blog/31782/managing-d8-module-dependencies-new-composer-manager : mettre le drupal/core en tant que dépendance pour pouvoir modifier le composer.json du root, sans modifier drupal core : https://www.drupal.org/node/1975220
- http://crossfunctional.net/blog/2013/may/indefinitive-guide-composer-drupal-8 : discussion sur les dépendances, sur leurs conflits et la manière de les résoudre. Pas de solution présentée.
- https://www.drupal.org/node/2405789 : composer manager permet de fusionner les composer.json de chaque module dans un global
Je mentionne le Composer extension pour drush (pas trop compris l’intérêt) : https://drupal.org/project/composer
Petit exemple pour rajouter une dépendance à son module : mymodule/composer.json [attention il faut rajouter composer.json & le champ name est important pour être reconnu par composer manager]
{ "name": "drupal/mymodule", "description": "An automaticcaly generated module", "license": "GPL-2.0+", "require": { "acquia/acquia-sdk-php-cloud-api": ">=0.9.0,<0.10.0", "monolog/monolog": "1.10.*" } }
Plugin
Permet de lister les plugins au sens Drupal (eq. hooks regroupés en objets) – ne fonctionne plus à l’heure actuelle en beta12.
Le Web Profiler
Indispensable. C’est un outil qui vient de symfony2 et qui a été adapté à Drupal8.
Pour installer le web-profiler, actuellement (en béta7) il faut suivre plusieurs étapes. En effet, certains modules ne s’installent pas correctement si les dépendances « internes » (packages s2) ne sont pas résolues :
- Installer drush 7.x
- Installer le Composer Manager
- Rafraîchir les dépendances :
- drush composer-manager-init
- /core composer drupal-update
- Installer le WebProfiler
Le console logger
- Installer le module « Consoller logger »
- Lancer la console :
drush runserver 2> /dev/null
- Écrire dans la console :
file_put_contents("php://stdout", sprintf("test"));
Debug Twig
- Activer le debug Twig :
sites/default/services.yml
{{ dump(text) }}
\Doctrine\Common\Util\Debug::dump(
$votreCollection
);
La console Drupal
Semblable à la console symfony2, mais pour Drupal. Permet de générer des modules à la volé, d’avoir un canevas.
- http://flocondetoile.fr/blog/creer-un-module-drupal-8-en-30-secondes
- http://flocondetoile.fr/blog/creer-un-bloc-drupal-8-en-quelques-secondes
- http://drupalconsole.com/
Pour l’installer :
curl -LSs http://drupalconsole.com/installer | php
exemple d’utilisation :
./console.phar generate:module
Generator UI
Similaire a la console, mais dédié à la génération de modules. Dispose de plus de templates que la console, mais pourrait être fusionné avec à terme :
Le module upgrader
Permet d’upgrader automatiquement un module drupal 7 en 8. Pour l’installer
drush dl drupalmoduleupgrader cd drupalmoduleupgrader composer update drush en -y drupalmoduleupgrader