class FieldItemBase

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Core/Field/FieldItemBase.php \Drupal\Core\Field\FieldItemBase
  2. 8.9.x core/lib/Drupal/Core/Field/FieldItemBase.php \Drupal\Core\Field\FieldItemBase
  3. 11.x core/lib/Drupal/Core/Field/FieldItemBase.php \Drupal\Core\Field\FieldItemBase

An entity field item.

Entity field items making use of this base class have to implement the static method propertyDefinitions().

Hierarchy

  • class \Drupal\Core\Field\FieldItemBase extends \Drupal\Core\TypedData\Plugin\DataType\Map implements \Drupal\Core\Field\FieldItemInterface

Expanded class hierarchy of FieldItemBase

See also

\Drupal\Core\Field\FieldItemInterface

Related topics

28 files declare their use of FieldItemBase
BaseFieldDefinitionTest.php in core/tests/Drupal/Tests/Core/Entity/BaseFieldDefinitionTest.php
BooleanItem.php in core/lib/Drupal/Core/Field/Plugin/Field/FieldType/BooleanItem.php
CommentItem.php in core/modules/comment/src/Plugin/Field/FieldType/CommentItem.php
DateTimeIso8601NormalizerTest.php in core/modules/serialization/tests/src/Unit/Normalizer/DateTimeIso8601NormalizerTest.php
DateTimeItem.php in core/modules/datetime/src/Plugin/Field/FieldType/DateTimeItem.php

... See full list

File

core/lib/Drupal/Core/Field/FieldItemBase.php, line 20

Namespace

Drupal\Core\Field
View source
abstract class FieldItemBase extends Map implements FieldItemInterface {
    
    /**
     * {@inheritdoc}
     */
    public static function defaultStorageSettings() {
        return [];
    }
    
    /**
     * {@inheritdoc}
     */
    public static function defaultFieldSettings() {
        return [];
    }
    
    /**
     * {@inheritdoc}
     */
    public static function storageSettingsSummary(FieldStorageDefinitionInterface $storage_definition) : array {
        return [];
    }
    
    /**
     * {@inheritdoc}
     */
    public static function fieldSettingsSummary(FieldDefinitionInterface $field_definition) : array {
        return [];
    }
    
    /**
     * {@inheritdoc}
     */
    public static function mainPropertyName() {
        return 'value';
    }
    
    /**
     * {@inheritdoc}
     */
    public function __construct(ComplexDataDefinitionInterface $definition, $name = NULL, ?TypedDataInterface $parent = NULL) {
        parent::__construct($definition, $name, $parent);
        // Initialize computed properties by default, such that they get cloned
        // with the whole item.
        foreach ($this->definition
            ->getPropertyDefinitions() as $name => $definition) {
            if ($definition->isComputed()) {
                $this->properties[$name] = \Drupal::typedDataManager()->getPropertyInstance($this, $name);
            }
        }
    }
    
    /**
     * {@inheritdoc}
     */
    public function getEntity() {
        return $this->getParent()
            ->getEntity();
    }
    
    /**
     * {@inheritdoc}
     */
    public function getLangcode() {
        return $this->getParent()
            ->getLangcode();
    }
    
    /**
     * {@inheritdoc}
     */
    public function getFieldDefinition() {
        return $this->definition
            ->getFieldDefinition();
    }
    
    /**
     * Returns the array of field settings.
     *
     * @return array
     *   The array of settings.
     */
    protected function getSettings() {
        return $this->getFieldDefinition()
            ->getSettings();
    }
    
    /**
     * Returns the value of a field setting.
     *
     * @param string $setting_name
     *   The setting name.
     *
     * @return mixed
     *   The setting value.
     */
    protected function getSetting($setting_name) {
        return $this->getFieldDefinition()
            ->getSetting($setting_name);
    }
    
    /**
     * {@inheritdoc}
     */
    public function setValue($values, $notify = TRUE) {
        // Treat the values as property value of the first property, if no array is
        // given.
        if (isset($values) && !is_array($values)) {
            $keys = array_keys($this->definition
                ->getPropertyDefinitions());
            $values = [
                $keys[0] => $values,
            ];
        }
        parent::setValue($values, $notify);
    }
    
    /**
     * {@inheritdoc}
     *
     * Different to the parent Map class, we avoid creating property objects as
     * far as possible in order to optimize performance. Thus we just update
     * $this->values if no property object has been created yet.
     */
    protected function writePropertyValue($property_name, $value) {
        // For defined properties there is either a property object or a plain
        // value that needs to be updated.
        if (isset($this->properties[$property_name])) {
            $this->properties[$property_name]
                ->setValue($value, FALSE);
        }
        else {
            $this->values[$property_name] = $value;
        }
    }
    
    /**
     * {@inheritdoc}
     */
    public function __get($name) {
        // There is either a property object or a plain value - possibly for a
        // not-defined property. If we have a plain value, directly return it.
        if (isset($this->properties[$name])) {
            return $this->properties[$name]
                ->getValue();
        }
        elseif (isset($this->values[$name])) {
            return $this->values[$name];
        }
    }
    
    /**
     * {@inheritdoc}
     */
    public function __set($name, $value) {
        // Support setting values via property objects, but take care in as the
        // value of the 'entity' property is typed data also.
        if ($value instanceof TypedDataInterface && !$value instanceof EntityInterface) {
            $value = $value->getValue();
        }
        $this->set($name, $value);
    }
    
    /**
     * {@inheritdoc}
     */
    public function __isset($name) {
        if (isset($this->properties[$name])) {
            return $this->properties[$name]
                ->getValue() !== NULL;
        }
        return isset($this->values[$name]);
    }
    
    /**
     * {@inheritdoc}
     */
    public function __unset($name) {
        if ($this->definition
            ->getPropertyDefinition($name)) {
            $this->set($name, NULL);
        }
        else {
            // Explicitly unset the property in $this->values if a non-defined
            // property is unset, such that its key is removed from $this->values.
            unset($this->values[$name]);
        }
    }
    
    /**
     * {@inheritdoc}
     */
    public function view($display_options = []) {
        $view_builder = \Drupal::entityTypeManager()->getViewBuilder($this->getEntity()
            ->getEntityTypeId());
        return $view_builder->viewFieldItem($this, $display_options);
    }
    
    /**
     * {@inheritdoc}
     */
    public function preSave() {
    }
    
    /**
     * {@inheritdoc}
     */
    public function postSave($update) {
    }
    
    /**
     * {@inheritdoc}
     */
    public function delete() {
    }
    
    /**
     * {@inheritdoc}
     */
    public static function generateSampleValue(FieldDefinitionInterface $field_definition) {
    }
    
    /**
     * {@inheritdoc}
     */
    public function deleteRevision() {
    }
    
    /**
     * {@inheritdoc}
     */
    public function storageSettingsForm(array &$form, FormStateInterface $form_state, $has_data) {
        return [];
    }
    
    /**
     * {@inheritdoc}
     */
    public function fieldSettingsForm(array $form, FormStateInterface $form_state) {
        return [];
    }
    
    /**
     * {@inheritdoc}
     */
    public static function storageSettingsToConfigData(array $settings) {
        return $settings;
    }
    
    /**
     * {@inheritdoc}
     */
    public static function storageSettingsFromConfigData(array $settings) {
        return $settings;
    }
    
    /**
     * {@inheritdoc}
     */
    public static function fieldSettingsToConfigData(array $settings) {
        return $settings;
    }
    
    /**
     * {@inheritdoc}
     */
    public static function fieldSettingsFromConfigData(array $settings) {
        return $settings;
    }
    
    /**
     * {@inheritdoc}
     */
    public static function calculateDependencies(FieldDefinitionInterface $field_definition) {
        return [];
    }
    
    /**
     * {@inheritdoc}
     */
    public static function calculateStorageDependencies(FieldStorageDefinitionInterface $field_definition) {
        return [];
    }
    
    /**
     * {@inheritdoc}
     */
    public static function onDependencyRemoval(FieldDefinitionInterface $field_definition, array $dependencies) {
        return FALSE;
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
DependencySerializationTrait::$_entityStorages protected property
DependencySerializationTrait::$_serviceIds protected property
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
FieldItemBase::calculateDependencies public static function Overrides FieldItemInterface::calculateDependencies 2
FieldItemBase::calculateStorageDependencies public static function Overrides FieldItemInterface::calculateStorageDependencies
FieldItemBase::defaultFieldSettings public static function Overrides FieldItemInterface::defaultFieldSettings 6
FieldItemBase::defaultStorageSettings public static function Overrides FieldItemInterface::defaultStorageSettings 9
FieldItemBase::delete public function Overrides FieldItemInterface::delete 2
FieldItemBase::deleteRevision public function Overrides FieldItemInterface::deleteRevision
FieldItemBase::fieldSettingsForm public function Overrides FieldItemInterface::fieldSettingsForm 6
FieldItemBase::fieldSettingsFromConfigData public static function Overrides FieldItemInterface::fieldSettingsFromConfigData 1
FieldItemBase::fieldSettingsSummary public static function Overrides FieldItemInterface::fieldSettingsSummary
FieldItemBase::fieldSettingsToConfigData public static function Overrides FieldItemInterface::fieldSettingsToConfigData 1
FieldItemBase::generateSampleValue public static function Overrides FieldItemInterface::generateSampleValue 17
FieldItemBase::getEntity public function Overrides FieldItemInterface::getEntity
FieldItemBase::getFieldDefinition public function Overrides FieldItemInterface::getFieldDefinition
FieldItemBase::getLangcode public function Overrides FieldItemInterface::getLangcode
FieldItemBase::getSetting protected function Returns the value of a field setting.
FieldItemBase::getSettings protected function Returns the array of field settings.
FieldItemBase::mainPropertyName public static function Overrides FieldItemInterface::mainPropertyName 8
FieldItemBase::onDependencyRemoval public static function Overrides FieldItemInterface::onDependencyRemoval
FieldItemBase::postSave public function Overrides FieldItemInterface::postSave 2
FieldItemBase::preSave public function Overrides FieldItemInterface::preSave 6
FieldItemBase::setValue public function Overrides Map::setValue 3
FieldItemBase::storageSettingsForm public function Overrides FieldItemInterface::storageSettingsForm 7
FieldItemBase::storageSettingsFromConfigData public static function Overrides FieldItemInterface::storageSettingsFromConfigData 2
FieldItemBase::storageSettingsSummary public static function Overrides FieldItemInterface::storageSettingsSummary
FieldItemBase::storageSettingsToConfigData public static function Overrides FieldItemInterface::storageSettingsToConfigData 2
FieldItemBase::view public function Overrides FieldItemInterface::view
FieldItemBase::writePropertyValue protected function Different to the parent Map class, we avoid creating property objects as
far as possible in order to optimize performance. Thus we just update
$this->values if no property object has been created yet.
Overrides Map::writePropertyValue
FieldItemBase::__construct public function Overrides TypedData::__construct 2
FieldItemBase::__get public function Overrides FieldItemInterface::__get 2
FieldItemBase::__isset public function Overrides FieldItemInterface::__isset
FieldItemBase::__set public function Overrides FieldItemInterface::__set 1
FieldItemBase::__unset public function Overrides FieldItemInterface::__unset
FieldItemInterface::propertyDefinitions public static function Defines field item properties. 29
FieldItemInterface::schema public static function Returns the schema for the field. 32
Map::$definition protected property The data definition. Overrides TypedData::$definition
Map::$properties protected property The array of properties.
Map::$values protected property An array of values for the contained properties.
Map::applyDefaultValue public function Overrides TypedData::applyDefaultValue 4
Map::get public function Overrides ComplexDataInterface::get
Map::getIterator public function
Map::getProperties public function Overrides ComplexDataInterface::getProperties
Map::getString public function Overrides TypedData::getString
Map::getValue public function Overrides TypedData::getValue
Map::isEmpty public function Overrides ComplexDataInterface::isEmpty 16
Map::onChange public function Overrides TraversableTypedDataInterface::onChange 3
Map::set public function Overrides ComplexDataInterface::set
Map::toArray public function Overrides ComplexDataInterface::toArray 1
Map::__clone public function Magic method: Implements a deep clone.
StringTranslationTrait::$stringTranslation protected property The string translation service. 3
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
TypedData::$name protected property The property name.
TypedData::$parent protected property The parent typed data object.
TypedData::createInstance public static function Overrides TypedDataInterface::createInstance
TypedData::getConstraints public function Overrides TypedDataInterface::getConstraints 8
TypedData::getDataDefinition public function Overrides TypedDataInterface::getDataDefinition
TypedData::getName public function Overrides TypedDataInterface::getName
TypedData::getParent public function Overrides TypedDataInterface::getParent
TypedData::getPluginDefinition public function Overrides PluginInspectionInterface::getPluginDefinition
TypedData::getPluginId public function Overrides PluginInspectionInterface::getPluginId
TypedData::getPropertyPath public function Overrides TypedDataInterface::getPropertyPath
TypedData::getRoot public function Overrides TypedDataInterface::getRoot
TypedData::setContext public function Overrides TypedDataInterface::setContext
TypedData::validate public function Overrides TypedDataInterface::validate
TypedDataTrait::$typedDataManager protected property The typed data manager used for creating the data types.
TypedDataTrait::getTypedDataManager public function Gets the typed data manager. 2
TypedDataTrait::setTypedDataManager public function Sets the typed data manager. 2

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