You are here

class EntityAdapter in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 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.

Plugin annotation


@DataType(
  id = "entity",
  label = @Translation("Entity"),
  description = @Translation("All kind of entities, e.g. nodes, comments or users."),
  deriver = "\Drupal\Core\Entity\Plugin\DataType\Deriver\EntityDeriver",
  definition_class = "\Drupal\Core\Entity\TypedData\EntityDataDefinition"
)

Hierarchy

Expanded class hierarchy of EntityAdapter

1 file declares its use of EntityAdapter
EntityAdapterUnitTest.php in core/tests/Drupal/Tests/Core/Entity/TypedData/EntityAdapterUnitTest.php
Contains \Drupal\Tests\Core\Entity\TypedData\EntityAdapterUnitTest.

File

core/lib/Drupal/Core/Entity/Plugin/DataType/EntityAdapter.php, line 34
Contains \Drupal\Core\Entity\Plugin\DataType\EntityAdapter.

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) {

      // @todo: Add support for config entities in
      // https://www.drupal.org/node/1818574.
      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) {

      // @todo: Add support for config entities in
      // https://www.drupal.org/node/1818574.
      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) {

      // @todo: Add support for config entities in
      // https://www.drupal.org/node/1818574.
      return array();
    }
    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() {
    return isset($this->entity) ? $this->entity
      ->getIterator() : new \ArrayIterator([]);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
EntityAdapter::$entity protected property The wrapped entity object.
EntityAdapter::applyDefaultValue public function Applies the default value. Overrides TypedData::applyDefaultValue
EntityAdapter::createFromEntity public static function Creates an instance wrapping the given entity.
EntityAdapter::get public function Gets a property object. Overrides ComplexDataInterface::get
EntityAdapter::getIterator public function
EntityAdapter::getProperties public function Gets an array of property objects. Overrides ComplexDataInterface::getProperties
EntityAdapter::getString public function Returns a string representation of the data. Overrides TypedData::getString
EntityAdapter::getValue public function Gets the data value. Overrides TypedData::getValue
EntityAdapter::isEmpty public function Determines whether the data structure is empty. Overrides ComplexDataInterface::isEmpty
EntityAdapter::onChange public function React to changes to a child property or item. Overrides TraversableTypedDataInterface::onChange
EntityAdapter::set public function Sets a property value. Overrides ComplexDataInterface::set
EntityAdapter::setValue public function Sets the data value. Overrides TypedData::setValue
EntityAdapter::toArray public function Returns an array of all property values. Overrides ComplexDataInterface::toArray
StringTranslationTrait::$stringTranslation protected property The string translation service.
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::$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 Constructs a TypedData object given its definition and context. Overrides TypedDataInterface::createInstance
TypedData::getConstraints public function Gets a list of validation constraints. Overrides TypedDataInterface::getConstraints 8
TypedData::getDataDefinition public function Gets the data definition. Overrides TypedDataInterface::getDataDefinition
TypedData::getName public function Returns the name of a property or item. Overrides TypedDataInterface::getName
TypedData::getParent public function Returns the parent data structure; i.e. either complex data or a list. Overrides TypedDataInterface::getParent
TypedData::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition
TypedData::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
TypedData::getPropertyPath public function Returns the property path of the data. Overrides TypedDataInterface::getPropertyPath
TypedData::getRoot public function Returns the root of the typed data tree. Overrides TypedDataInterface::getRoot
TypedData::setContext public function Sets the context of a property or item via a context aware parent. Overrides TypedDataInterface::setContext
TypedData::validate public function Validates the currently set data value. Overrides TypedDataInterface::validate
TypedData::__construct public function Constructs a TypedData object given its definition and context. 3
TypedDataTrait::$typedDataManager protected property The typed data manager used for creating the data types.
TypedDataTrait::getTypedDataManager public function Gets the typed data manager. 1
TypedDataTrait::setTypedDataManager public function Sets the typed data manager. 1