Catégories
Drupal PHP Tutoriel

Drupal 8 – Créer rapidement un type d’entité

Dans ce tutoriel, nous allons voir comment créer en quelques lignes de commandes un nouveau type d’entité pour Drupal 8.
Pour cela nous allons avoir besoin de Drupal Console, si vous connaissez Drush, c’est le même genre d’outils.

Drupal Console vous permets d’exécuter des commandes sur vos projets qui vous faciliterons grandement la vie. Dans notre cas, au lieu de créer tous les fichiers nécessaires pour notre type d’entité, une simple commande va nous permettre de les générer.

Installation de Drupal Console

Pour installer Drupal Console, le plus simple est de passer par Composer et de saisir la commande suivante dans votre projet :

composer require drupal/console

Une fois l’installation terminée, nous allons tester si tout est configuré correctement pour profiter complètement de Drupal Console avec la commande suivante :

vendor/drush/drupal

Vous devriez avoir une liste des commandes disponibles comme ci-dessous :

Création d’un module

Nous allons dans un premier temps créer un module qui sera lié à notre entité. Vous devrez compléter plusieurs informations :

vendor/drush/drupal gm

Donc j’ai créé un module Tutoriel dans le dossier modules/custom avec tous les fichiers de base d’un module (vous n’êtes pas obligé de dire oui à la création de la classe de test unitaire, ni à celle pour le template).

Création l’entité

Maintenant que nous avons notre module, nous allons pouvoir lancer la commande pour générer l’entité.

vendor/drush/drupal geco

La première ligne demande à quel module on rattache l’entité, dans notre cas, tutoriel. Ensuite on défini un nom à cette entité (Tutoriel), Drupal Console génère pour nous les fichiers de base.

Dans le fichier modules\custom\tutoriel\src\Entity\Tutoriel.php, dans la fonction baseFieldDefinitions, on peut voir les champs générés (user_id, name, status, created, changed, revision_translation_affected). C’est ici que vous pouvez ajouter d’autres champs via la programmation, mais vous avez la possibilité d’ajouter des champs par la suite via l’interface de votre site.

Ajouter un champ à l’entité

Comme dit plus haut, pour ajouter un champ, il y a deux façons de faire, via le PHP ou via l’interface du site.

Ajout par l’interface du site

Avant tout, nous allons activer notre module, et pour cela, profitons-en pour utiliser une commande Drupal Console :

vendor/drush/drupal moi tutoriel

Si vous n’avez pas modifié le chemin par défaut de votre entité, allez sur votre site à l’url suivante : /admin/structure/tutoriel/settings/fields

Cliquez sur ajouter un champ

L’interface suivante est exactement la même que celle que vous avez lorsque vous ajoutez un champ à un Article ou à une Page de base.

Vous pouvez sélectionner le type de champs

Ajout d’un champ en programmation

Pour ajouter un champ en PHP à votre entité, retournons dans le fichier modules\custom\tutoriel\src\Entity\Tutoriel.php. Je vais créer le champ Activation, qui est un booléen.

Dans la méthode baseFieldDefinitions, placez le code suivant avant return $fields; :

$fields['activation'] = BaseFieldDefinition::create('boolean')->setDescription(t('Mon champ créé par le code.'))
      ->setLabel(t('Activation'))
      ->setDisplayOptions('form', [
        'type' => 'boolean_checkbox',
        'weight' => -6,
      ]);

C’est la partie la moins intuitive car il faut chercher dans la documentation Drupal 8, les types de champs existants.
Activez votre module, avec la commande :

vendor/drush/drupal moi tutoriel

Si votre module est déjà activez, videz le cache :

vendor/drush/drupal cr

Quand vous ajouterai un contenu de type Tutoriel, vous deviez avoir ceci dans le formulaire :

Conclusion

Il est assez facile de créer une entité via Drupal Console, je n’ai pas montré comment installer de manière globale la console mais c’est une possibilité. Créer vos propres entités est un moyen de se débarrasser des surcouches sur les nœuds par défaut.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *