class BaseFieldOverride

Same name in other branches
  1. 9 core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php \Drupal\Core\Field\Entity\BaseFieldOverride
  2. 8.9.x core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php \Drupal\Core\Field\Entity\BaseFieldOverride
  3. 10 core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php \Drupal\Core\Field\Entity\BaseFieldOverride

Defines the base field override entity.

Allows base fields to be overridden on the bundle level.

Hierarchy

Expanded class hierarchy of BaseFieldOverride

13 files declare their use of BaseFieldOverride
BaseFieldDefinition.php in core/lib/Drupal/Core/Field/BaseFieldDefinition.php
BaseFieldOverrideResourceTestBase.php in core/tests/Drupal/FunctionalTests/Rest/BaseFieldOverrideResourceTestBase.php
BaseFieldOverrideTest.php in core/tests/Drupal/KernelTests/Core/Field/Entity/BaseFieldOverrideTest.php
BaseFieldOverrideTest.php in core/modules/jsonapi/tests/src/Functional/BaseFieldOverrideTest.php
BaseFieldOverrideValidationTest.php in core/tests/Drupal/KernelTests/Core/Entity/BaseFieldOverrideValidationTest.php

... See full list

File

core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php, line 19

Namespace

Drupal\Core\Field\Entity
View source
class BaseFieldOverride extends FieldConfigBase {
    
    /**
     * The base field definition.
     *
     * @var \Drupal\Core\Field\BaseFieldDefinition
     */
    protected $baseFieldDefinition;
    
    /**
     * Creates a base field override object.
     *
     * @param \Drupal\Core\Field\BaseFieldDefinition $base_field_definition
     *   The base field definition to override.
     * @param string $bundle
     *   The bundle to which the override applies.
     *
     * @return \Drupal\Core\Field\Entity\BaseFieldOverride
     *   A new base field override object.
     */
    public static function createFromBaseFieldDefinition(BaseFieldDefinition $base_field_definition, $bundle) {
        $values = $base_field_definition->toArray();
        $values['bundle'] = $bundle;
        $values['baseFieldDefinition'] = $base_field_definition;
        return \Drupal::entityTypeManager()->getStorage('base_field_override')
            ->create($values);
    }
    
    /**
     * Constructs a BaseFieldOverride object.
     *
     * In most cases, base field override entities are created via
     * BaseFieldOverride::createFromBaseFieldDefinition($definition, 'bundle')
     *
     * @param array $values
     *   An array of base field bundle override properties, keyed by property
     *   name. The field to override is specified by referring to an existing
     *   field with:
     *   - field_name: The field name.
     *   - entity_type: The entity type.
     *   Additionally, a 'bundle' property is required to indicate the entity
     *   bundle to which the bundle field override is attached to. Other array
     *   elements will be used to set the corresponding properties on the class;
     *   see the class property documentation for details.
     * @param string $entity_type
     *   (optional) The type of the entity to create. Defaults to
     *   'base_field_override'.
     *
     * @throws \Drupal\Core\Field\FieldException
     *   Exception thrown if $values does not contain a field_name, entity_type or
     *   bundle value.
     */
    public function __construct(array $values, $entity_type = 'base_field_override') {
        if (empty($values['field_name'])) {
            throw new FieldException('Attempt to create a base field bundle override of a field without a field_name');
        }
        if (empty($values['entity_type'])) {
            throw new FieldException("Attempt to create a base field bundle override of field {$values['field_name']} without an entity_type");
        }
        if (empty($values['bundle'])) {
            throw new FieldException("Attempt to create a base field bundle override of field {$values['field_name']} without a bundle");
        }
        parent::__construct($values, $entity_type);
    }
    
    /**
     * {@inheritdoc}
     */
    public function getFieldStorageDefinition() {
        return $this->getBaseFieldDefinition()
            ->getFieldStorageDefinition();
    }
    
    /**
     * {@inheritdoc}
     */
    public function isDisplayConfigurable($context) {
        return $this->getBaseFieldDefinition()
            ->isDisplayConfigurable($context);
    }
    
    /**
     * {@inheritdoc}
     */
    public function getDisplayOptions($display_context) {
        return $this->getBaseFieldDefinition()
            ->getDisplayOptions($display_context);
    }
    
    /**
     * {@inheritdoc}
     */
    public function isReadOnly() {
        return $this->getBaseFieldDefinition()
            ->isReadOnly();
    }
    
    /**
     * {@inheritdoc}
     */
    public function isComputed() {
        return $this->getBaseFieldDefinition()
            ->isComputed();
    }
    
    /**
     * {@inheritdoc}
     */
    public function isInternal() : bool {
        return $this->getBaseFieldDefinition()
            ->isInternal();
    }
    
    /**
     * {@inheritdoc}
     */
    public function getClass() {
        return $this->getBaseFieldDefinition()
            ->getClass();
    }
    
    /**
     * {@inheritdoc}
     */
    public function getUniqueIdentifier() {
        return $this->getBaseFieldDefinition()
            ->getUniqueIdentifier();
    }
    
    /**
     * Gets the base field definition.
     *
     * @return \Drupal\Core\Field\BaseFieldDefinition
     *   An associative array of the base field definition.
     */
    protected function getBaseFieldDefinition() {
        if (!isset($this->baseFieldDefinition)) {
            $fields = \Drupal::service('entity_field.manager')->getBaseFieldDefinitions($this->entity_type);
            $this->baseFieldDefinition = $fields[$this->getName()];
        }
        return $this->baseFieldDefinition;
    }
    
    /**
     * {@inheritdoc}
     *
     * @throws \Drupal\Core\Field\FieldException
     *   If the bundle is being changed.
     */
    public function preSave(EntityStorageInterface $storage) {
        // 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.
        parent::preSave($storage);
        if ($this->isNew()) {
            // @todo This assumes that the previous definition isn't some
            //   non-config-based override, but that might not be the case:
            //   https://www.drupal.org/node/2321071.
            $previous_definition = $this->getBaseFieldDefinition();
        }
        else {
            // Some updates are always disallowed.
            if ($this->entity_type != $this->getOriginal()->entity_type) {
                throw new FieldException("Cannot change the entity_type of an existing base field bundle override (entity type:{$this->entity_type}, bundle:{$this->getOriginal()->bundle}, field name: {$this->field_name})");
            }
            if ($this->bundle != $this->getOriginal()->bundle) {
                throw new FieldException("Cannot change the bundle of an existing base field bundle override (entity type:{$this->entity_type}, bundle:{$this->getOriginal()->bundle}, field name: {$this->field_name})");
            }
            $previous_definition = $this->getOriginal();
        }
        // Notify the entity storage.
        $this->entityTypeManager()
            ->getStorage($this->getTargetEntityTypeId())
            ->onFieldDefinitionUpdate($this, $previous_definition);
    }
    
    /**
     * {@inheritdoc}
     */
    public static function postDelete(EntityStorageInterface $storage, array $field_overrides) {
        $entity_type_manager = \Drupal::entityTypeManager();
        // Clear the cache upfront, to refresh the results of getBundles().
        \Drupal::service('entity_field.manager')->clearCachedFieldDefinitions();
        
        /** @var \Drupal\Core\Field\Entity\BaseFieldOverride $field_override */
        foreach ($field_overrides as $field_override) {
            // Inform the system that the field definition is being updated back to
            // its non-overridden state.
            // @todo This assumes that there isn't a non-config-based override that
            //   we're returning to, but that might not be the case:
            //   https://www.drupal.org/node/2321071.
            $entity_type_manager->getStorage($field_override->getTargetEntityTypeId())
                ->onFieldDefinitionUpdate($field_override->getBaseFieldDefinition(), $field_override);
        }
    }
    
    /**
     * Loads a base field bundle override config entity.
     *
     * @param string $entity_type_id
     *   ID of the entity type.
     * @param string $bundle
     *   Bundle name.
     * @param string $field_name
     *   Name of the field.
     *
     * @return \Drupal\Core\Field\FieldConfigInterface|null
     *   The base field bundle override config entity if one exists for the
     *   provided field name, otherwise NULL.
     */
    public static function loadByName($entity_type_id, $bundle, $field_name) {
        return \Drupal::entityTypeManager()->getStorage('base_field_override')
            ->load($entity_type_id . '.' . $bundle . '.' . $field_name);
    }
    
    /**
     * Implements the magic __sleep() method.
     */
    public function __sleep() : array {
        // Only serialize necessary properties, excluding those that can be
        // recalculated.
        unset($this->baseFieldDefinition);
        return parent::__sleep();
    }

}

Members

Title Sort descending Modifiers Object type Summary Member alias Overriden Title Overrides
BaseFieldOverride::$baseFieldDefinition protected property The base field definition.
BaseFieldOverride::createFromBaseFieldDefinition public static function Creates a base field override object.
BaseFieldOverride::getBaseFieldDefinition protected function Gets the base field definition.
BaseFieldOverride::getClass public function Overrides FieldConfigBase::getClass
BaseFieldOverride::getDisplayOptions public function Overrides FieldDefinitionInterface::getDisplayOptions
BaseFieldOverride::getFieldStorageDefinition public function Overrides FieldDefinitionInterface::getFieldStorageDefinition
BaseFieldOverride::getUniqueIdentifier public function Overrides FieldDefinitionInterface::getUniqueIdentifier
BaseFieldOverride::isComputed public function Overrides DataDefinitionInterface::isComputed
BaseFieldOverride::isDisplayConfigurable public function Overrides FieldDefinitionInterface::isDisplayConfigurable
BaseFieldOverride::isInternal public function Overrides FieldConfigBase::isInternal
BaseFieldOverride::isReadOnly public function Overrides DataDefinitionInterface::isReadOnly
BaseFieldOverride::loadByName public static function Loads a base field bundle override config entity.
BaseFieldOverride::postDelete public static function Overrides FieldConfigBase::postDelete
BaseFieldOverride::preSave public function Overrides ConfigEntityBase::preSave
BaseFieldOverride::__construct public function Constructs a BaseFieldOverride object. Overrides ConfigEntityBase::__construct
BaseFieldOverride::__sleep public function Implements the magic __sleep() method. Overrides FieldConfigBase::__sleep
CacheableDependencyTrait::$cacheContexts protected property Cache contexts.
CacheableDependencyTrait::$cacheMaxAge protected property Cache max-age.
CacheableDependencyTrait::$cacheTags protected property Cache tags.
CacheableDependencyTrait::setCacheability protected function Sets cacheability; useful for value object constructors.
ConfigEntityBase::$isUninstalling private property Whether the config is being deleted by the uninstall process.
ConfigEntityBase::$langcode protected property The language code of the entity's default language.
ConfigEntityBase::$originalId protected property The original ID of the configuration entity.
ConfigEntityBase::$status protected property The enabled/disabled status of the configuration entity. 4
ConfigEntityBase::$third_party_settings protected property
ConfigEntityBase::$trustedData protected property Trust supplied data and not use configuration schema on save.
ConfigEntityBase::$uuid protected property The UUID for this entity.
ConfigEntityBase::$_core protected property
ConfigEntityBase::addDependency protected function Overrides \Drupal\Core\Entity\DependencyTrait:addDependency().
ConfigEntityBase::createDuplicate public function Overrides EntityBase::createDuplicate 1
ConfigEntityBase::disable public function Overrides ConfigEntityInterface::disable 1
ConfigEntityBase::enable public function Overrides ConfigEntityInterface::enable
ConfigEntityBase::get public function Overrides ConfigEntityInterface::get
ConfigEntityBase::getCacheTagsToInvalidate public function Overrides EntityBase::getCacheTagsToInvalidate 1
ConfigEntityBase::getConfigDependencyName public function Overrides EntityBase::getConfigDependencyName
ConfigEntityBase::getConfigManager protected static function Gets the configuration manager.
ConfigEntityBase::getConfigTarget public function Overrides EntityBase::getConfigTarget
ConfigEntityBase::getDependencies public function Overrides ConfigEntityInterface::getDependencies
ConfigEntityBase::getOriginalId public function Overrides EntityBase::getOriginalId
ConfigEntityBase::getThirdPartyProviders public function Overrides ThirdPartySettingsInterface::getThirdPartyProviders
ConfigEntityBase::getThirdPartySetting public function Overrides ThirdPartySettingsInterface::getThirdPartySetting
ConfigEntityBase::getThirdPartySettings public function Overrides ThirdPartySettingsInterface::getThirdPartySettings
ConfigEntityBase::getTypedConfig protected function Gets the typed config manager.
ConfigEntityBase::hasTrustedData public function Overrides ConfigEntityInterface::hasTrustedData
ConfigEntityBase::invalidateTagsOnDelete protected static function Override to never invalidate the individual entities' cache tags; the
config system already invalidates them.
Overrides EntityBase::invalidateTagsOnDelete
ConfigEntityBase::invalidateTagsOnSave protected function Override to never invalidate the entity's cache tag; the config system
already invalidates it.
Overrides EntityBase::invalidateTagsOnSave
ConfigEntityBase::isInstallable public function Overrides ConfigEntityInterface::isInstallable 2
ConfigEntityBase::isNew public function Overrides EntityBase::isNew(). Overrides EntityBase::isNew
ConfigEntityBase::isUninstalling public function Overrides ConfigEntityInterface::isUninstalling
ConfigEntityBase::preDelete public static function Overrides EntityBase::preDelete 8
ConfigEntityBase::save public function Overrides EntityBase::save 2
ConfigEntityBase::set public function Overrides ConfigEntityInterface::set 1
ConfigEntityBase::setOriginalId public function Overrides EntityBase::setOriginalId
ConfigEntityBase::setStatus public function Overrides ConfigEntityInterface::setStatus
ConfigEntityBase::setThirdPartySetting public function Overrides ThirdPartySettingsInterface::setThirdPartySetting
ConfigEntityBase::setUninstalling public function
ConfigEntityBase::sort public static function Helper callback for uasort() to sort configuration entities by weight and label. 6
ConfigEntityBase::status public function Overrides ConfigEntityInterface::status 4
ConfigEntityBase::toArray public function Overrides EntityBase::toArray 3
ConfigEntityBase::toUrl public function Overrides EntityBase::toUrl
ConfigEntityBase::trustData public function Overrides ConfigEntityInterface::trustData
ConfigEntityBase::unsetThirdPartySetting public function Overrides ThirdPartySettingsInterface::unsetThirdPartySetting
DependencySerializationTrait::$_entityStorages protected property
DependencySerializationTrait::$_serviceIds protected property
DependencySerializationTrait::__sleep public function Aliased as: traitSleep 1
DependencySerializationTrait::__wakeup public function 2
DependencyTrait::$dependencies protected property The object's dependencies.
DependencyTrait::addDependencies protected function Adds multiple dependencies.
DependencyTrait::addDependency protected function Adds a dependency. Aliased as: addDependencyTrait
EntityBase::$enforceIsNew protected property Boolean indicating whether the entity should be forced to be new.
EntityBase::$entityTypeId protected property The entity type.
EntityBase::$originalEntity protected property The original unchanged entity.
EntityBase::$typedData protected property A typed data object wrapping this entity.
EntityBase::access public function Overrides AccessibleInterface::access 1
EntityBase::bundle public function Overrides EntityInterface::bundle 1
EntityBase::create public static function Overrides EntityInterface::create 2
EntityBase::delete public function Overrides EntityInterface::delete 1
EntityBase::enforceIsNew public function Overrides EntityInterface::enforceIsNew
EntityBase::entityTypeBundleInfo protected function Gets the entity type bundle info service.
EntityBase::entityTypeManager protected function Gets the entity type manager.
EntityBase::getCacheContexts public function Overrides CacheableDependencyTrait::getCacheContexts
EntityBase::getCacheMaxAge public function Overrides CacheableDependencyTrait::getCacheMaxAge
EntityBase::getCacheTags public function Overrides CacheableDependencyTrait::getCacheTags
EntityBase::getConfigDependencyKey public function Overrides EntityInterface::getConfigDependencyKey
EntityBase::getEntityType public function Overrides EntityInterface::getEntityType 1
EntityBase::getEntityTypeId public function Overrides EntityInterface::getEntityTypeId
EntityBase::getListCacheTagsToInvalidate protected function The list cache tags to invalidate for this entity.
EntityBase::getOriginal public function Overrides EntityInterface::getOriginal
EntityBase::getTypedData public function Overrides EntityInterface::getTypedData
EntityBase::getTypedDataClass private function Returns the typed data class name for this entity.
EntityBase::hasLinkTemplate public function Overrides EntityInterface::hasLinkTemplate
EntityBase::label public function Overrides EntityInterface::label 6
EntityBase::language public function Overrides EntityInterface::language 1
EntityBase::languageManager protected function Gets the language manager.
EntityBase::linkTemplates protected function Gets an array link templates. 1
EntityBase::load public static function Overrides EntityInterface::load
EntityBase::loadMultiple public static function Overrides EntityInterface::loadMultiple
EntityBase::postLoad public static function Overrides EntityInterface::postLoad 3
EntityBase::preCreate public static function Overrides EntityInterface::preCreate 6
EntityBase::referencedEntities public function Overrides EntityInterface::referencedEntities 1
EntityBase::setOriginal public function Overrides EntityInterface::setOriginal
EntityBase::toLink public function Overrides EntityInterface::toLink
EntityBase::uriRelationships public function Overrides EntityInterface::uriRelationships
EntityBase::urlRouteParameters protected function Gets an array of placeholders for this entity. 2
EntityBase::uuid public function Overrides EntityInterface::uuid 1
EntityBase::uuidGenerator protected function Gets the UUID generator.
EntityBase::__get public function 1
EntityBase::__isset public function 1
EntityBase::__set public function 1
EntityBase::__unset public function 1
FieldConfigBase::$bundle protected property The name of the bundle the field is attached to.
FieldConfigBase::$constraints protected property Array of constraint options keyed by constraint plugin ID.
FieldConfigBase::$default_value protected property Default field value.
FieldConfigBase::$default_value_callback protected property The name of a callback function that returns default values.
FieldConfigBase::$description protected property The field description.
FieldConfigBase::$entity_type protected property The name of the entity type the field is attached to.
FieldConfigBase::$fieldStorage protected property The field storage object. 1
FieldConfigBase::$field_name protected property The field name.
FieldConfigBase::$field_type protected property The field type.
FieldConfigBase::$id protected property The field ID.
FieldConfigBase::$itemDefinition protected property The data definition of a field item.
FieldConfigBase::$label protected property The human-readable label for the field.
FieldConfigBase::$propertyConstraints protected property Array of property constraint options keyed by property ID.
FieldConfigBase::$required protected property Flag indicating whether the field is required.
FieldConfigBase::$settings protected property Field-type specific settings.
FieldConfigBase::$translatable protected property Flag indicating whether the field is translatable.
FieldConfigBase::addConstraint public function Overrides FieldConfigInterface::addConstraint
FieldConfigBase::addPropertyConstraints public function Overrides FieldConfigInterface::addPropertyConstraints
FieldConfigBase::calculateDependencies public function Overrides ConfigEntityBase::calculateDependencies 1
FieldConfigBase::createFromDataType public static function Overrides DataDefinitionInterface::createFromDataType
FieldConfigBase::createFromItemType public static function Overrides ListDataDefinitionInterface::createFromItemType
FieldConfigBase::getConfig public function Overrides FieldDefinitionInterface::getConfig
FieldConfigBase::getConstraint public function Overrides DataDefinitionInterface::getConstraint
FieldConfigBase::getConstraints public function Overrides DataDefinitionInterface::getConstraints
FieldConfigBase::getDataType public function Overrides DataDefinitionInterface::getDataType
FieldConfigBase::getDefaultValue public function Overrides FieldDefinitionInterface::getDefaultValue
FieldConfigBase::getDefaultValueCallback public function Overrides FieldDefinitionInterface::getDefaultValueCallback
FieldConfigBase::getDefaultValueLiteral public function Overrides FieldDefinitionInterface::getDefaultValueLiteral
FieldConfigBase::getDescription public function Overrides DataDefinitionInterface::getDescription
FieldConfigBase::getItemDefinition public function Overrides ListDataDefinitionInterface::getItemDefinition
FieldConfigBase::getLabel public function Overrides DataDefinitionInterface::getLabel
FieldConfigBase::getName public function Overrides FieldDefinitionInterface::getName
FieldConfigBase::getSetting public function Overrides DataDefinitionInterface::getSetting
FieldConfigBase::getSettings public function Overrides DataDefinitionInterface::getSettings
FieldConfigBase::getTargetBundle public function Overrides FieldDefinitionInterface::getTargetBundle
FieldConfigBase::getTargetEntityTypeId public function Overrides FieldDefinitionInterface::getTargetEntityTypeId
FieldConfigBase::getType public function Overrides FieldDefinitionInterface::getType
FieldConfigBase::id public function Overrides EntityBase::id
FieldConfigBase::isList public function Overrides DataDefinitionInterface::isList
FieldConfigBase::isRequired public function Overrides FieldDefinitionInterface::isRequired
FieldConfigBase::isTranslatable public function Overrides FieldDefinitionInterface::isTranslatable
FieldConfigBase::onDependencyRemoval public function Overrides ConfigEntityBase::onDependencyRemoval
FieldConfigBase::postCreate public function Overrides EntityBase::postCreate 1
FieldConfigBase::postSave public function Overrides EntityBase::postSave
FieldConfigBase::setConstraints public function Overrides FieldConfigInterface::setConstraints
FieldConfigBase::setDefaultValue public function Overrides FieldConfigInterface::setDefaultValue
FieldConfigBase::setDefaultValueCallback public function Overrides FieldConfigInterface::setDefaultValueCallback
FieldConfigBase::setDescription public function Overrides FieldConfigInterface::setDescription
FieldConfigBase::setLabel public function Overrides FieldConfigInterface::setLabel
FieldConfigBase::setPropertyConstraints public function Overrides FieldConfigInterface::setPropertyConstraints
FieldConfigBase::setRequired public function Overrides FieldConfigInterface::setRequired
FieldConfigBase::setSetting public function Overrides FieldConfigInterface::setSetting
FieldConfigBase::setSettings public function Overrides FieldConfigInterface::setSettings
FieldConfigBase::setTranslatable public function Overrides FieldConfigInterface::setTranslatable
FieldInputValueNormalizerTrait::normalizeValue protected static function Ensure a field value is transformed into a format keyed by delta.
PluginDependencyTrait::calculatePluginDependencies protected function Calculates and adds dependencies of a specific plugin instance. 1
PluginDependencyTrait::getPluginDependencies protected function Calculates and returns dependencies of a specific plugin instance.
PluginDependencyTrait::moduleHandler protected function Wraps the module handler. 1
PluginDependencyTrait::themeHandler protected function Wraps the theme handler. 1
RefinableCacheableDependencyTrait::addCacheableDependency public function 1
RefinableCacheableDependencyTrait::addCacheContexts public function
RefinableCacheableDependencyTrait::addCacheTags public function
RefinableCacheableDependencyTrait::mergeCacheMaxAge public function
SynchronizableEntityTrait::$isSyncing protected property Is entity being created updated or deleted through synchronization process.
SynchronizableEntityTrait::isSyncing public function
SynchronizableEntityTrait::setSyncing public function

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.