setDefaultValue()
Метод BaseFieldDefinition::setDefaultValue()
вызывается в FieldableEntityInterface::baseFieldDefinitions()
и содержит значение по умолчанию, которое будет отображаться в форме создания сущности. Пример:
class MyEnity extends ContentEntityBase {
/**
* {@inheritdoc}
*/
public static function baseFieldDefinitions(EntityTypeInterface $entity_type): array {
$fields = parent::baseFieldDefinitions($entity_type);
$fields['author_name'] = BaseFieldDefinition::create('string')
->setLabel(new TM('Author name'))
->setDefaultValue('Guest') // <---
->setDisplayOptions('form', ['type' => 'string_textfield'])
->setDisplayOptions('view', ['type' => 'string']);
return $fields;
}
}
Если после включения модуля изменить значение в setDefaultValue()
, то это никак не повлияет на уже добавленные сущности.
setInitialValue()
Метод BaseFieldDefinition::setInitialValue()
вызывается в hook_update_N()
при добавления поля к инсталлированному типу сущности и содержит значение, которое будет установлено всем уже существующим сущностям этого типа. Пример:
/**
* Add author_name field to my_entity.
*/
function mymodule_update_11001(): void {
$field_definition = BaseFieldDefinition::create('string')
->setLabel(new TM('Author name'))
->setDefaultValue('Guest')
->setInitialValue('Guest') // <---
->setDisplayOptions('form', ['type' => 'string_textfield'])
->setDisplayOptions('view', ['type' => 'string']);
\Drupal::entityDefinitionUpdateManager()->installFieldStorageDefinition('author_name', 'my_entity', 'my_module', $field_definition);
}
Если отсюда убрать setInitialValue('Guest')
то после запуска drush updb
все существующие на данный момент сущности my_entity
будут иметь пустое поле author_name
.
Написанное актуально для
Drupal 8+
Добавить комментарий