diff --git a/core/lib/Drupal/Core/Field/BaseFieldDefinition.php b/core/lib/Drupal/Core/Field/BaseFieldDefinition.php index e28d9975b49..2ff671613ee 100644 --- a/core/lib/Drupal/Core/Field/BaseFieldDefinition.php +++ b/core/lib/Drupal/Core/Field/BaseFieldDefinition.php @@ -12,7 +12,7 @@ use Drupal\Core\TypedData\OptionsProviderInterface; /** * A class for defining entity fields. */ -class BaseFieldDefinition extends ListDataDefinition implements FieldDefinitionInterface, FieldStorageDefinitionInterface { +class BaseFieldDefinition extends ListDataDefinition implements FieldDefinitionInterface, FieldStorageDefinitionInterface, RequiredFieldStorageDefinitionInterface { use UnchangingCacheableDependencyTrait; @@ -723,4 +723,30 @@ class BaseFieldDefinition extends ListDataDefinition implements FieldDefinitionI return BaseFieldOverride::createFromBaseFieldDefinition($this, $bundle); } + /** + * {@inheritdoc} + */ + public function isStorageRequired() { + if (isset($this->definition['storage_required'])) { + return (bool) $this->definition['storage_required']; + } + + // Default to the 'required' property of the base field. + return $this->isRequired(); + } + + /** + * Sets whether the field storage is required. + * + * @param bool $required + * Whether the field storage is required. + * + * @return static + * The object itself for chaining. + */ + public function setStorageRequired($required) { + $this->definition['storage_required'] = $required; + return $this; + } + } diff --git a/core/lib/Drupal/Core/Field/RequiredFieldStorageDefinitionInterface.php b/core/lib/Drupal/Core/Field/RequiredFieldStorageDefinitionInterface.php new file mode 100644 index 00000000000..d29e56907eb --- /dev/null +++ b/core/lib/Drupal/Core/Field/RequiredFieldStorageDefinitionInterface.php @@ -0,0 +1,21 @@ +assertFalse($definition->isRequired()); } + /** + * Tests storage required. + * + * @covers ::isStorageRequired + * @covers ::setStorageRequired + */ + public function testFieldStorageRequired() { + $definition = BaseFieldDefinition::create($this->fieldType); + $this->assertFalse($definition->isStorageRequired()); + $definition->setStorageRequired(TRUE); + $this->assertTrue($definition->isStorageRequired()); + $definition->setStorageRequired(FALSE); + $this->assertFalse($definition->isStorageRequired()); + } + /** * Tests provider. *