diff --git a/core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php b/core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php index 9fbe75c..b6b2a3c 100644 --- a/core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php +++ b/core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php @@ -154,8 +154,12 @@ protected function getBaseFieldDefinition() { * BaseFieldOverride::allowBundleRename() has not been called. */ public function preSave(EntityStorageInterface $storage) { - // Set the default instance settings. - $this->settings += \Drupal::service('plugin.manager.field.field_type')->getDefaultFieldSettings($this->getType()); + // Filter out unknown settings and make sure all settings are present, so + // that a complete field definition is passed to the various hooks and + // written to config. + $field_type_manager = \Drupal::service('plugin.manager.field.field_type'); + $default_settings = $field_type_manager->getDefaultFieldSettings($this->getType()); + $this->settings = array_intersect_key($this->settings, $default_settings) + $default_settings; // Call the parent's presave method to perform validate and calculate // dependencies. diff --git a/core/lib/Drupal/Core/Field/FieldConfigBase.php b/core/lib/Drupal/Core/Field/FieldConfigBase.php index eaba0f9..7f7e6be 100644 --- a/core/lib/Drupal/Core/Field/FieldConfigBase.php +++ b/core/lib/Drupal/Core/Field/FieldConfigBase.php @@ -270,15 +270,6 @@ public function postCreate(EntityStorageInterface $storage) { /** * {@inheritdoc} */ - public function preSave(EntityStorageInterface $storage) { - // Filter out unknown settings. - $default_settings = $this->getFieldStorageDefinition()->getSettings(); - $this->settings = array_intersect_key($this->settings, $default_settings); - } - - /** - * {@inheritdoc} - */ public function postSave(EntityStorageInterface $storage, $update = TRUE) { // Clear the cache. $this->entityManager()->clearCachedFieldDefinitions(); diff --git a/core/modules/field/src/Entity/FieldConfig.php b/core/modules/field/src/Entity/FieldConfig.php index 87f4400..a8d9c0a 100644 --- a/core/modules/field/src/Entity/FieldConfig.php +++ b/core/modules/field/src/Entity/FieldConfig.php @@ -138,9 +138,13 @@ public function preSave(EntityStorageInterface $storage) { $storage_definition = $this->getFieldStorageDefinition(); + // Filter out unknown settings and make sure all settings are present, so + // that a complete field definition is passed to the various hooks and + // written to config. + $default_settings = $field_type_manager->getDefaultFieldSettings($storage_definition->type); + $this->settings = array_intersect_key($this->settings, $default_settings) + $default_settings; + if ($this->isNew()) { - // Set the default field settings. - $this->settings += $field_type_manager->getDefaultFieldSettings($storage_definition->type); // Notify the entity storage. $entity_manager->getStorage($this->entity_type)->onFieldDefinitionCreate($this); } @@ -155,8 +159,6 @@ public function preSave(EntityStorageInterface $storage) { if ($storage_definition->uuid() != $this->original->getFieldStorageDefinition()->uuid()) { throw new FieldException("Cannot change an existing field's storage."); } - // Set the default field settings. - $this->settings += $field_type_manager->getDefaultFieldSettings($storage_definition->type); // Notify the entity storage. $entity_manager->getStorage($this->entity_type)->onFieldDefinitionUpdate($this, $this->original); }