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);
}
}
Contenus en rapport
Voici comment ajouter un basefield slug à un type d'entité client. La définition de cette propriété se trouvant dans la méthode baseFieldDefinitions de notre type d'entité :
Commentaires
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 ?
Ajouter un commentaire