Drupal 8 - Ajouter des propriétés à un type d'entité existant

Posté le Vendredi 4 août 2017 - 14:43
Dernière mise à jour le Jeudi 26 avril 2018 - 07:47

Drupal vient avec des types d'entité prédéfinis (Node, ou User par exemple). À ces type d'entité il est possible d'ajouter des fields, mais il est aussi possible d'ajouter des propriétés.

Voici comment ajouter des propriétés (prénom et nom) aux utilisateurs.

Dans le fichier monmodule.module :

  1. function monmodule_entity_base_field_info(\Drupal\Core\Entity\EntityTypeInterface $entity_type) {
  2. if ($entity_type->id() === 'user') {
  3. $fields = [];
  4.  
  5. $fields['firstname'] = \Drupal\Core\Field\BaseFieldDefinition::create('string')
  6. ->setLabel(t('Firstname'))
  7. ->setSettings(array(
  8. 'max_length' => 100,
  9. 'text_processing' => 0,
  10. ))
  11. ->setDisplayConfigurable('form', TRUE)
  12. ->setDisplayConfigurable('view', TRUE);
  13.  
  14. $fields['lastname'] = \Drupal\Core\Field\BaseFieldDefinition::create('string')
  15. ->setLabel(t('Lastname'))
  16. ->setSettings(array(
  17. 'max_length' => 100,
  18. 'text_processing' => 0,
  19. ))
  20. ->setDisplayConfigurable('form', TRUE)
  21. ->setDisplayConfigurable('view', TRUE);
  22.  
  23. return $fields;
  24. }
  25. }

Dans le fichier monmodule.install :

  1. /**
  2.  * Create user additional properties
  3.  */
  4. function monmodule_update_8001() {
  5. $entity_manager = \Drupal::entityManager();
  6. $definition = $entity_manager->getFieldStorageDefinitions('user')['firstname'];
  7. $entity_manager->onFieldStorageDefinitionCreate($definition);
  8. $definition = $entity_manager->getFieldStorageDefinitions('user')['lastname'];
  9. $entity_manager->onFieldStorageDefinitionCreate($definition);
  10. }
  11.  
  12. function monmodule_uninstall() {
  13. $entity_manager = \Drupal::entityManager();
  14. $definition = $entity_manager->getLastInstalledFieldStorageDefinitions('user')['firstname'];
  15. $entity_manager->onFieldStorageDefinitionDelete($definition);
  16. $definition = $entity_manager->getLastInstalledFieldStorageDefinitions('user')['lastname'];
  17. $entity_manager->onFieldStorageDefinitionDelete($definition);
  18. }

 

 

Commentaires

Posté le Vendredi 4 août 2017 - 14:47

Pour info, c'est aussi possible de définir des base fields par bundle via hook_entity_bundle_field_info() !

Ajouter un commentaire

Ne sera pas publié

HTML restreint

  • Balises HTML autorisées : <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et les adresses courriel se transforment en liens automatiquement.
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...