Créer un module Drupal 8 en 30 secondes

Chronomètre

Avec l'intégration de composants de Symfony2, l'adoption du format YAML, la refonte complète de Drupal 8 vers la programmation orientée objet, etc. l'initialisation d'un module Drupal 8 est devenue plus complexe (au  sens chronophage) que sur Drupal 7 où il suffisait de déclarer son module (fichier .info) et de créer un fichier .module pour pouvoir commencer tout de suite à développer des fonctionnalités métier.

Drupal 8 est désormais conforme à la spécification PSR-4, qui permet de charger automatiquement une classe depuis un chemin du système de fichiers. Cela signifie entre autres qu'un répertoire d'un module Drupal 8 doit respecter désormais une structure bien précise. La création de cette structure peut se révéler fastidieuse. Découvrons comment nous pouvons automatiser cela grâce au composant console.

Pour reprendre la description du projet console.
Le but de ce projet est de tirer parti du composant Console de Symfony et donc de fournir un outil en ligne de commande pour automatiser la création de modules drupal 8 et assurer d'autres tâches récurrentes.

Ce projet permet donc de

  • génèrer les fichiers du module et les fichiers de configuration.
  • génèrer une structure de répertoire compatible PSR-4 pour un module.
  • créer des routes sur les fichiers YML et les lier à leur contrôleur et leurs classes de formulaire PHP.
  • créer des classes (utilisation des namespaces, uses, implements et extends quand c'est nécessaire)
  • ajouter des services en utilisant l'injection de dépendance lors de la génération de classe.
  • lister les services enregistrés sur le conteneur de services.
  • lister les routes enregistrées sur le système de routage.
  • reconstruire le cache du système de routage

Passons à la pratique pour voir de quoi il en retourne plus concrètement.

Installation des pré-requis : composer

En préalable, pour pouvoir utiliser console il nous faut disposer de Composer. Si ce n'est déjà fait, pour l'installer sur un système linux il vous suffit d'exécuter la commande suivante
 
curl -sS https://getcomposer.org/installer | php
 
Afin de pouvoir utiliser Composer de façon globale sur votre système vous pouvez déplacer ce fichier
mv composer.phar /usr/local/bin/composer
 
et enregistrer dans votre .bashrc le chemin de Composer pour pouvoir l'appeler depuis n'importe quel endroit sans avoir besoin de spécifier le chemin d'accès complet
sed -i '1i export PATH="$HOME/.composer/vendor/bin:$PATH"' $HOME/.bashrc
source $HOME/.bashrc

 

Pour plus d'infos pour installer Composer vous pouvez consulter cette documentation ou encore ce billet relatif à Composer pour installer Drush compatible avec Drupal 8.

Installation de Console

Mise à jour du 25/02/2015 : Le projet Console évolue vite et son installation devient de plus en plus simple. Référez vous au site dédié pour l'installation de Drupal console : drupalconsole.com

Une fois ces pré-requis terminés, attaquons l'installation du module console.

cd /path/to/drupal8folder
COMPOSER_BIN_DIR=bin composer require --dev drupal/console:~0.1

 

Vous pouvez vérifier que console est bien installé

bin/console list
 

Cette commande vous renvoie alors toutes les commandes Drupal8 disponible avec console.

console list

Génération d'un module Drupal 8

Et nous pouvons désormais créer notre module en executant la commande

bin/console generate:module
 

En quelques secondes, nous disposons maintenant de notre module (de type "hello world") disposant d'un contrôleur de base, de tests et d'une structure de répertoire conforme aux spécifications PSR-4.

Structure of  a drupal 8 module folder

Nous pouvons alors commencer à implémenter nos fonctionnalités. Mais console ne s'arrête pas là et couvre bien d'autres usages...Il peut par exemple générer en quelques secondes un contrôleur, un formulaire, un block, ou encore une entité spécifique à l'instar du module Entity Construction Kit pour Drupal 7, ou encore de l'utilitaire disponible en ligne Drupal Entity Generator, basé sur le module model.

Mais ceci fera l'objet d'un autre billet. Vous avez déjà utilisé console ? Pour d'autres usages ? N'hésitez pas à partager votre expérience dans les commentaires.

Commentaires

Soumis par Sébastien (non vérifié) le 24/11/2014 à 17:12 - Permalien

Bonjour,

J'ai suivis les étapes d'installation de la console tout semble bien se passer.
Seulement au lancement j'ai une erreur :

voici le message :

[RuntimeException]
Missing $settings['hash_salt'] in settings.php.

J'ai cherché sur le net mais je n'ai rien trouvé de pertinent si quelqu'un pouvait avoir une idée ca m'arrangerait !

Merci ! :D

Soumis par Sébastien (non vérifié) le 25/11/2014 à 10:59 - Permalien

Oui je viens d'essayer en Beta2 et rien ne change ...
Aucune idée là toujours le même message d'erreur.

Soumis par Sébastien (non vérifié) le 26/11/2014 à 09:25 - Permalien

J'ai trouvé d'où venait mon erreur. Quand on est en multi sites on a pas de settings.php dans [root]/sites/ il suffit d'en copier un pour avoir un hash_salt et ca fonctionne.
Je pensais avoir déjà fais ca mais là surprise ca marche ..

Soumis par emena (non vérifié) le 01/01/2015 à 14:09 - Permalien

Bonjour,

J'ai suivi la procédure décrite, j'ai une erreur à l'installation de console.

symfony/dependency-injection suggests installing symfony/config ()
symfony/dependency-injection suggests installing symfony/proxy-manager-bridge (Generate service proxies to lazy load them)
symfony/console suggests installing symfony/event-dispatcher ()
symfony/console suggests installing symfony/process ()
symfony/console suggests installing psr/log (For using the console logger)

J'ai placé le répertoire bin dans www/mon.site/ est-ce le bon endroit ?
Je ne trouve pas l'erreur sur le net.

Je suis en ubuntu 14.

Merci de vos excellents tuto.
EM

Ajouter un commentaire