Drupal 8 - Ajouter des propriétés à un type d'entité existant
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 :
function monmodule_entity_base_field_info(\Drupal\Core\Entity\EntityTypeInterface $entity_type) { if ($entity_type->id() === 'user') { $fields = []; $fields['firstname'] = \Drupal\Core\Field\BaseFieldDefinition::create('string') ->setLabel(t('Firstname')) ->setSettings(array( 'max_length' => 100, 'text_processing' => 0, )) ->setDisplayConfigurable('form', TRUE) ->setDisplayConfigurable('view', TRUE); $fields['lastname'] = \Drupal\Core\Field\BaseFieldDefinition::create('string') ->setLabel(t('Lastname')) ->setSettings(array( 'max_length' => 100, 'text_processing' => 0, )) ->setDisplayConfigurable('form', TRUE) ->setDisplayConfigurable('view', TRUE); return $fields; } }
Dans le fichier monmodule.install :
/** * Create user additional properties */ function monmodule_update_8001() { $entity_manager = \Drupal::entityManager(); $definition = $entity_manager->getFieldStorageDefinitions('user')['firstname']; $entity_manager->onFieldStorageDefinitionCreate($definition); $definition = $entity_manager->getFieldStorageDefinitions('user')['lastname']; $entity_manager->onFieldStorageDefinitionCreate($definition); } function monmodule_uninstall() { $entity_manager = \Drupal::entityManager(); $definition = $entity_manager->getLastInstalledFieldStorageDefinitions('user')['firstname']; $entity_manager->onFieldStorageDefinitionDelete($definition); $definition = $entity_manager->getLastInstalledFieldStorageDefinitions('user')['lastname']; $entity_manager->onFieldStorageDefinitionDelete($definition); }