Cet article a été écrit il y a plus de quatre ans, son contenu n'est peut-être plus d'actualité.
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_type_id = 'user';
$fields = ['firstname', 'lastname'];
$definition_update_manager = \Drupal::entityDefinitionUpdateManager();
\Drupal::entityTypeManager()->clearCachedDefinitions();
$entity_type = $definition_update_manager->getEntityType($entity_type_id);
foreach ($fields as $field) {
$fieldDefinition = monmodule_entity_base_field_info($entity_type)[$field];
$definition_update_manager->installFieldStorageDefinition($field, $entity_type_id, $entity_type_id, $fieldDefinition);
}
}
Commentaires (2)
Comments
Pour info, c'est aussi possible de définir des base fields par bundle via hook_entity_bundle_field_info() !
C'est quoi un bundle ?