Suite de l'episode 1 : À la découverte de drupal 8 - #1 : Ma première entité
Aujourd'hui, nous continuons notre découverte de Drupal 8. Le but du jeu aujourd'hui est de créer une entité avec un champ personnalisé qui sera créé automatiquement lors de l'installation, via une grande nouveauté de Drupal 8, la gestion de la configuration.
Je continue mon site de pronostics pour l'occasion, c'est que l'euro 2016 arrive à grands pas ! Après l'entité League de l'épisode 1, nous allons cette fois gérer les équipes.Pourquoi je définie une équipe comme une entité et non pas un type de contenu ? Bonne question, pas vraiment de bonne réponse, c'est surtout car j'ai envie de jouer avec les entités !
Alors, comment est structurée une équipe ?
- Id => La clé primaire
- name => Le nom de l'équipe
- logo => Le logo du club
Rien de bien compliqué pour les deux premiers attributs, ce seront des propriétés de base de mon entité. Le logo sera quand à lui un field, semblable à celui que l'on peut créer via l'interface d'administration, dans un type de contenu.
Création de l'entité
Comme dans l'épisode précédent, on va utiliser Console pour générer le module et l'entité.
On commence d'abord par vérifier s'il n'y a pas de mise à jours pour Console, on utilise pour ça composer. Via un terminal, à la racine de l'installation de Drupal :
composer update drupal/console
[scald=12:sdl_editor_representation]
On génère maintenant le module mespronos_teams qui contiendra l'entité
bin/console generate:module
- Nom du module : Mespronos Teams
- Nom machine : mespronos_teams
- Description : Gestion des équipes
- Pas de contrôleur (on verra ça plus tard)
On génère maintenant l'entité
bin/console generate:entity:content
- Nom de l'entité : Team
- Nom machine : team
On active le module via l'administration.
[scald=13:sdl_editor_representation]
Création du Champs
On peut maintenant ajouter des champs à notre entité via la field API (anciennement CCK dans Drupal 6, et dans le core depuis Drupal 7)
Via Gérer > Structure > Team Settings > Gérér les champs on créer un champ de type « image » dont le nom machine sera field_logo.
[scald=14:sdl_editor_representation]
La configuration (CMI en action)
C'est super, on peut maintenant créer des équipes et leur affecter un logo. Par contre le soucis ici, c'est que si jamais je désactive mon module, je perds le champs que je viens de créer. Aussi, je ne peux pas en versionner la configuration, si jamais je viens la modifier plus tard. Mais heureusement pour nous l'initiative CMI « Configuration Management Initiative » a pensé à nous dans Drupal 8.
L'objectif de cette initiative est donc de pouvoir exporter toute la partie « configuration » de Drupal dans des fichiers YAML.
Via le fichier settings.php, on peut définir là où l'on veut stocker l'ensemble des fichiers YAML qui contiendront la configuration de drupal. Par défaut c'est dans un dossier dont le nom est généré aléatoirement dans le dossier /sites/monsites. Personnellement je préfère que ces éléments ne soient pas accessible sur internet, même si normalement le risque est minime. Pour cela à la fin du fichier settings.php je dé-commente et modifie les lignes suivantes :
$config_directories['active'] = '../config/active';
$config_directories['staging'] = '../config/staging';
On peut exporter d'un coup l'ensemble de la configuration de notre site via drush avec la commande config-export :
drush @monsite config-export
[scald=15:sdl_editor_representation]
Revenons à nos moutons, nous allons donc chercher la configuration de notre field et l'intégré à notre module. Afin que lors de l'installation du module, le field soit automatiquement créé. La configuration du champs est répartie dans deux champs :
field.field.team.team.field_logo.yml
field.storage.team.field_logo.yml
Pour que ces fichiers soient pris en compte lors de l'installation il faut les placer dans un dossier config/install dans notre module :
[scald=16:sdl_editor_representation]
On test en désinstallant notre module et le réinstallant, c'est ok, notre champs existe !
[scald=14:sdl_editor_representation]
Youpi Youhou !
C'est fini pour aujourd'hui, comme la dernière fois vous pouvez trouver l'ensemble de mes modules sur github à l'adresse suivante : https://github.com/kgaut/mespronos
N'hésitez-pas si vous avez des remarques ou des questions !