class EntityAdapter

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

Defines the "entity" data type.

Instances of this class wrap entity objects and allow to deal with entities based upon the Typed Data API.

In addition to the "entity" data type, this exposes derived "entity:$entity_type" and "entity:$entity_type:$bundle" data types.

Hierarchy

Expanded class hierarchy of EntityAdapter

10 files declare their use of EntityAdapter
ContentEntityBaseUnitTest.php in core/tests/Drupal/Tests/Core/Entity/ContentEntityBaseUnitTest.php
EntityAdapterUnitTest.php in core/tests/Drupal/Tests/Core/Entity/TypedData/EntityAdapterUnitTest.php
EntityBaseTest.php in core/tests/Drupal/KernelTests/Core/Entity/EntityBaseTest.php
EntityContextDefinition.php in core/lib/Drupal/Core/Plugin/Context/EntityContextDefinition.php
EntityDeriver.php in core/lib/Drupal/Core/Entity/Plugin/DataType/Deriver/EntityDeriver.php

... See full list

File

core/lib/Drupal/Core/Entity/Plugin/DataType/EntityAdapter.php, line 24

Namespace

Drupal\Core\Entity\Plugin\DataType
View source
class EntityAdapter extends TypedData implements \IteratorAggregate, ComplexDataInterface {
    
    /**
     * The wrapped entity object.
     *
     * @var \Drupal\Core\Entity\EntityInterface|null
     */
    protected $entity;
    
    /**
     * Creates an instance wrapping the given entity.
     *
     * @param \Drupal\Core\Entity\EntityInterface|null $entity
     *   The entity object to wrap.
     *
     * @return static
     */
    public static function createFromEntity(EntityInterface $entity) {
        $definition = EntityDataDefinition::create()->setEntityTypeId($entity->getEntityTypeId())
            ->setBundles([
            $entity->bundle(),
        ]);
        $instance = new static($definition);
        $instance->setValue($entity);
        return $instance;
    }
    
    /**
     * {@inheritdoc}
     */
    public function getValue() {
        return $this->entity;
    }
    
    /**
     * {@inheritdoc}
     */
    public function setValue($entity, $notify = TRUE) {
        $this->entity = $entity;
        // Notify the parent of any changes.
        if ($notify && isset($this->parent)) {
            $this->parent
                ->onChange($this->name);
        }
    }
    
    /**
     * {@inheritdoc}
     */
    public function get($property_name) {
        if (!isset($this->entity)) {
            throw new MissingDataException("Unable to get property {$property_name} as no entity has been provided.");
        }
        if (!$this->entity instanceof FieldableEntityInterface) {
            throw new \InvalidArgumentException("Unable to get unknown property {$property_name}.");
        }
        // This will throw an exception for unknown fields.
        return $this->entity
            ->get($property_name);
    }
    
    /**
     * {@inheritdoc}
     */
    public function set($property_name, $value, $notify = TRUE) {
        if (!isset($this->entity)) {
            throw new MissingDataException("Unable to set property {$property_name} as no entity has been provided.");
        }
        if (!$this->entity instanceof FieldableEntityInterface) {
            throw new \InvalidArgumentException("Unable to set unknown property {$property_name}.");
        }
        // This will throw an exception for unknown fields.
        $this->entity
            ->set($property_name, $value, $notify);
        return $this;
    }
    
    /**
     * {@inheritdoc}
     */
    public function getProperties($include_computed = FALSE) {
        if (!isset($this->entity)) {
            throw new MissingDataException('Unable to get properties as no entity has been provided.');
        }
        if (!$this->entity instanceof FieldableEntityInterface) {
            return [];
        }
        return $this->entity
            ->getFields($include_computed);
    }
    
    /**
     * {@inheritdoc}
     */
    public function toArray() {
        if (!isset($this->entity)) {
            throw new MissingDataException('Unable to get property values as no entity has been provided.');
        }
        return $this->entity
            ->toArray();
    }
    
    /**
     * {@inheritdoc}
     */
    public function isEmpty() {
        return !isset($this->entity);
    }
    
    /**
     * {@inheritdoc}
     */
    public function onChange($property_name) {
        if (isset($this->entity) && $this->entity instanceof FieldableEntityInterface) {
            // Let the entity know of any changes.
            $this->entity
                ->onChange($property_name);
        }
    }
    
    /**
     * {@inheritdoc}
     */
    public function getString() {
        return isset($this->entity) ? $this->entity
            ->label() : '';
    }
    
    /**
     * {@inheritdoc}
     */
    public function applyDefaultValue($notify = TRUE) {
        // Apply the default value of all properties.
        foreach ($this->getProperties() as $property) {
            $property->applyDefaultValue(FALSE);
        }
        return $this;
    }
    
    /**
     * {@inheritdoc}
     */
    public function getIterator() : \ArrayIterator {
        return $this->entity instanceof \IteratorAggregate ? $this->entity
            ->getIterator() : new \ArrayIterator([]);
    }
    
    /**
     * Returns the wrapped entity object.
     *
     * @return \Drupal\Core\Entity\EntityInterface
     *   The wrapped entity object. If the entity is translatable and a specific
     *   translation is required, always request it by calling ::getTranslation()
     *   or ::getUntranslated() as the language of the returned object is not
     *   defined.
     */
    public function getEntity() {
        return $this->entity;
    }

}

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
EntityAdapter::$entity protected property The wrapped entity object. 1
EntityAdapter::applyDefaultValue public function Overrides TypedData::applyDefaultValue 1
EntityAdapter::createFromEntity public static function Creates an instance wrapping the given entity.
EntityAdapter::get public function Overrides ComplexDataInterface::get 1
EntityAdapter::getEntity public function Returns the wrapped entity object.
EntityAdapter::getIterator public function 1
EntityAdapter::getProperties public function Overrides ComplexDataInterface::getProperties 1
EntityAdapter::getString public function Overrides TypedData::getString
EntityAdapter::getValue public function Overrides TypedData::getValue
EntityAdapter::isEmpty public function Overrides ComplexDataInterface::isEmpty
EntityAdapter::onChange public function Overrides TraversableTypedDataInterface::onChange 1
EntityAdapter::set public function Overrides ComplexDataInterface::set 1
EntityAdapter::setValue public function Overrides TypedData::setValue
EntityAdapter::toArray public function Overrides ComplexDataInterface::toArray
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. 1
TypedData::$definition protected property The data definition. 1
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
TypedData::__construct public function Constructs a TypedData object given its definition and context. 4
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.