class EntityReferenceFieldItemList
Defines an item list class for entity reference fields.
Hierarchy
- class \Drupal\Core\TypedData\TypedData implements \Drupal\Core\TypedData\TypedDataInterface, \Drupal\Component\Plugin\PluginInspectionInterface uses \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\StringTranslation\StringTranslationTrait, \Drupal\Core\TypedData\TypedDataTrait
- class \Drupal\Core\TypedData\Plugin\DataType\ItemList implements \Drupal\Core\TypedData\Plugin\DataType\IteratorAggregate, \Drupal\Core\TypedData\ListInterface extends \Drupal\Core\TypedData\TypedData
- class \Drupal\Core\Field\FieldItemList implements \Drupal\Core\Field\FieldItemListInterface extends \Drupal\Core\TypedData\Plugin\DataType\ItemList
- class \Drupal\Core\Field\EntityReferenceFieldItemList implements \Drupal\Core\Field\EntityReferenceFieldItemListInterface extends \Drupal\Core\Field\FieldItemList
 
 
 - class \Drupal\Core\Field\FieldItemList implements \Drupal\Core\Field\FieldItemListInterface extends \Drupal\Core\TypedData\Plugin\DataType\ItemList
 
 - class \Drupal\Core\TypedData\Plugin\DataType\ItemList implements \Drupal\Core\TypedData\Plugin\DataType\IteratorAggregate, \Drupal\Core\TypedData\ListInterface extends \Drupal\Core\TypedData\TypedData
 
Expanded class hierarchy of EntityReferenceFieldItemList
5 files declare their use of EntityReferenceFieldItemList
- ComputedReferenceTestFieldItemList.php in core/
modules/ system/ tests/ modules/ entity_test/ src/ Plugin/ Field/ ComputedReferenceTestFieldItemList.php  - EntityReferenceItem.php in core/
lib/ Drupal/ Core/ Field/ Plugin/ Field/ FieldType/ EntityReferenceItem.php  - EntityReferenceItemSubclass.php in core/
modules/ media_library/ tests/ modules/ media_library_test/ src/ Plugin/ Field/ FieldType/ EntityReferenceItemSubclass.php  - FileFieldItemList.php in core/
modules/ file/ src/ Plugin/ Field/ FieldType/ FileFieldItemList.php  - MediaLibraryFieldWidgetOpener.php in core/
modules/ media_library/ src/ MediaLibraryFieldWidgetOpener.php  
File
- 
              core/
lib/ Drupal/ Core/ Field/ EntityReferenceFieldItemList.php, line 11  
Namespace
Drupal\Core\FieldView source
class EntityReferenceFieldItemList extends FieldItemList implements EntityReferenceFieldItemListInterface {
  
  /**
   * {@inheritdoc}
   */
  public function getConstraints() {
    $constraints = parent::getConstraints();
    $constraint_manager = $this->getTypedDataManager()
      ->getValidationConstraintManager();
    $constraints[] = $constraint_manager->create('ValidReference', []);
    return $constraints;
  }
  
  /**
   * {@inheritdoc}
   */
  public function referencedEntities() {
    if ($this->isEmpty()) {
      return [];
    }
    // Collect the IDs of existing entities to load, and directly grab the
    // "autocreate" entities that are already populated in $item->entity.
    $target_entities = $ids = [];
    foreach ($this->list as $delta => $item) {
      if ($item->target_id !== NULL) {
        $ids[$delta] = $item->target_id;
      }
      elseif ($item->hasNewEntity()) {
        $target_entities[$delta] = $item->entity;
      }
    }
    // Load and add the existing entities.
    if ($ids) {
      $target_type = $this->getFieldDefinition()
        ->getSetting('target_type');
      $entities = \Drupal::entityTypeManager()->getStorage($target_type)
        ->loadMultiple($ids);
      foreach ($ids as $delta => $target_id) {
        if (isset($entities[$target_id])) {
          $target_entities[$delta] = $entities[$target_id];
        }
      }
      // Ensure the returned array is ordered by deltas.
      ksort($target_entities);
    }
    return $target_entities;
  }
  
  /**
   * {@inheritdoc}
   */
  public static function processDefaultValue($default_value, FieldableEntityInterface $entity, FieldDefinitionInterface $definition) {
    $default_value = parent::processDefaultValue($default_value, $entity, $definition);
    if ($default_value) {
      // Convert UUIDs to numeric IDs.
      $uuids = [];
      foreach ($default_value as $delta => $properties) {
        if (isset($properties['target_uuid'])) {
          $uuids[$delta] = $properties['target_uuid'];
        }
      }
      if ($uuids) {
        $target_type = $definition->getSetting('target_type');
        $entity_ids = \Drupal::entityQuery($target_type)->accessCheck(TRUE)
          ->condition('uuid', $uuids, 'IN')
          ->execute();
        $entities = \Drupal::entityTypeManager()->getStorage($target_type)
          ->loadMultiple($entity_ids);
        $entity_uuids = [];
        foreach ($entities as $id => $entity) {
          $entity_uuids[$entity->uuid()] = $id;
        }
        foreach ($uuids as $delta => $uuid) {
          if (isset($entity_uuids[$uuid])) {
            $default_value[$delta]['target_id'] = $entity_uuids[$uuid];
            unset($default_value[$delta]['target_uuid']);
          }
          else {
            unset($default_value[$delta]);
          }
        }
      }
      // Ensure we return consecutive deltas, in case we removed unknown UUIDs.
      $default_value = array_values($default_value);
    }
    return $default_value;
  }
  
  /**
   * {@inheritdoc}
   */
  public function defaultValuesFormSubmit(array $element, array &$form, FormStateInterface $form_state) {
    $default_value = parent::defaultValuesFormSubmit($element, $form, $form_state);
    // Convert numeric IDs to UUIDs to ensure config deployability.
    $ids = [];
    foreach ($default_value as $delta => $properties) {
      if (isset($properties['entity']) && $properties['entity']->isNew()) {
        // This may be a newly created term.
        $properties['entity']->save();
        $default_value[$delta]['target_id'] = $properties['entity']->id();
        unset($default_value[$delta]['entity']);
      }
      $ids[] = $default_value[$delta]['target_id'];
    }
    $entities = \Drupal::entityTypeManager()->getStorage($this->getSetting('target_type'))
      ->loadMultiple($ids);
    foreach ($default_value as $delta => $properties) {
      unset($default_value[$delta]['target_id']);
      $default_value[$delta]['target_uuid'] = $entities[$properties['target_id']]->uuid();
    }
    return $default_value;
  }
}
Members
| Title Sort descending | Modifiers | Object type | Summary | Overriden Title | Overrides | 
|---|---|---|---|---|---|
| DependencySerializationTrait::$_entityStorages | protected | property | An array of entity type IDs keyed by the property name of their storages. | ||
| DependencySerializationTrait::$_serviceIds | protected | property | An array of service IDs keyed by property name used for serialization. | ||
| DependencySerializationTrait::__sleep | public | function | 2 | ||
| DependencySerializationTrait::__wakeup | public | function | #[\ReturnTypeWillChange] | 2 | |
| EntityReferenceFieldItemList::defaultValuesFormSubmit | public | function | Processes the submitted default value. | Overrides FieldItemList::defaultValuesFormSubmit | |
| EntityReferenceFieldItemList::getConstraints | public | function | Gets a list of validation constraints. | Overrides FieldItemList::getConstraints | |
| EntityReferenceFieldItemList::processDefaultValue | public static | function | Processes the default value before being applied. | Overrides FieldItemList::processDefaultValue | |
| EntityReferenceFieldItemList::referencedEntities | public | function | Gets the entities referenced by this field, preserving field item deltas. | Overrides EntityReferenceFieldItemListInterface::referencedEntities | |
| FieldItemList::$langcode | protected | property | The langcode of the field values held in the object. | ||
| FieldItemList::$list | protected | property | Numerically indexed array of field items. | Overrides ItemList::$list | 1 | 
| FieldItemList::access | public | function | Checks data value access. | Overrides AccessibleInterface::access | 1 | 
| FieldItemList::applyDefaultValue | public | function | Applies the default value. | Overrides TypedData::applyDefaultValue | |
| FieldItemList::createItem | protected | function | Helper for creating a list item object. | Overrides ItemList::createItem | |
| FieldItemList::defaultAccess | public | function | Contains the default access logic of this field. | Overrides FieldItemListInterface::defaultAccess | 3 | 
| FieldItemList::defaultValuesForm | public | function | Returns a form for the default value input. | Overrides FieldItemListInterface::defaultValuesForm | 2 | 
| FieldItemList::defaultValuesFormValidate | public | function | Validates the submitted default value. | Overrides FieldItemListInterface::defaultValuesFormValidate | 2 | 
| FieldItemList::defaultValueWidget | protected | function | Returns the widget object used in default value form. | ||
| FieldItemList::delegateMethod | protected | function | Calls a method on each FieldItem. | ||
| FieldItemList::delete | public | function | Defines custom delete behavior for field values. | Overrides FieldItemListInterface::delete | 2 | 
| FieldItemList::deleteRevision | public | function | Defines custom revision delete behavior for field values. | Overrides FieldItemListInterface::deleteRevision | 1 | 
| FieldItemList::equals | public | function | Determines equality to another object implementing FieldItemListInterface. | Overrides FieldItemListInterface::equals | 2 | 
| FieldItemList::filterEmptyItems | public | function | Filters out empty field items and re-numbers the item deltas. | Overrides FieldItemListInterface::filterEmptyItems | |
| FieldItemList::generateSampleItems | public | function | Populates a specified number of field items with valid sample data. | Overrides FieldItemListInterface::generateSampleItems | 1 | 
| FieldItemList::getEntity | public | function | Gets the entity that field belongs to. | Overrides FieldItemListInterface::getEntity | 1 | 
| FieldItemList::getFieldDefinition | public | function | Gets the field definition. | Overrides FieldItemListInterface::getFieldDefinition | |
| FieldItemList::getLangcode | public | function | Gets the langcode of the field values held in the object. | Overrides FieldItemListInterface::getLangcode | |
| FieldItemList::getSetting | public | function | Returns the value of a given field setting. | Overrides FieldItemListInterface::getSetting | |
| FieldItemList::getSettings | public | function | Returns the array of field settings. | Overrides FieldItemListInterface::getSettings | |
| FieldItemList::hasAffectingChanges | public | function | Determines whether the field has relevant changes. | Overrides FieldItemListInterface::hasAffectingChanges | 1 | 
| FieldItemList::postSave | public | function | Defines custom post-save behavior for field values. | Overrides FieldItemListInterface::postSave | 1 | 
| FieldItemList::preSave | public | function | Defines custom presave behavior for field values. | Overrides FieldItemListInterface::preSave | 1 | 
| FieldItemList::setLangcode | public | function | Sets the langcode of the field values held in the object. | Overrides FieldItemListInterface::setLangcode | |
| FieldItemList::setValue | public | function | Overrides \Drupal\Core\TypedData\TypedData::setValue(). | Overrides ItemList::setValue | |
| FieldItemList::view | public | function | Returns a renderable array for the field items. | Overrides FieldItemListInterface::view | |
| FieldItemList::__get | public | function | Magic method: Gets a property value of to the first field item. | Overrides FieldItemListInterface::__get | |
| FieldItemList::__isset | public | function | Magic method: Determines whether a property of the first field item is set. | Overrides FieldItemListInterface::__isset | |
| FieldItemList::__set | public | function | Magic method: Sets a property value of the first field item. | Overrides FieldItemListInterface::__set | |
| FieldItemList::__unset | public | function | Magic method: Unsets a property of the first field item. | Overrides FieldItemListInterface::__unset | |
| ItemList::appendItem | public | function | Appends a new item to the list. | Overrides ListInterface::appendItem | |
| ItemList::count | public | function | #[\ReturnTypeWillChange] | ||
| ItemList::filter | public | function | Filters the items in the list using a custom callback. | Overrides ListInterface::filter | |
| ItemList::first | public | function | Returns the first item in this list. | Overrides ListInterface::first | |
| ItemList::get | public | function | Returns the item at the specified position in this list. | Overrides ListInterface::get | 2 | 
| ItemList::getItemDefinition | public | function | Gets the definition of a contained item. | Overrides ListInterface::getItemDefinition | |
| ItemList::getIterator | public | function | #[\ReturnTypeWillChange] | ||
| ItemList::getString | public | function | Returns a string representation of the data. | Overrides TypedData::getString | |
| ItemList::getValue | public | function | Gets the data value. | Overrides TypedData::getValue | |
| ItemList::isEmpty | public | function | Determines whether the list contains any non-empty items. | Overrides ListInterface::isEmpty | |
| ItemList::offsetExists | public | function | #[\ReturnTypeWillChange] | 1 | |
| ItemList::offsetGet | public | function | #[\ReturnTypeWillChange] | ||
| ItemList::offsetSet | public | function | #[\ReturnTypeWillChange] | ||
| ItemList::offsetUnset | public | function | #[\ReturnTypeWillChange] | ||
| ItemList::onChange | public | function | React to changes to a child property or item. | Overrides TraversableTypedDataInterface::onChange | 1 | 
| ItemList::rekey | protected | function | Renumbers the items in the list. | ||
| ItemList::removeItem | public | function | Removes the item at the specified position. | Overrides ListInterface::removeItem | |
| ItemList::set | public | function | Sets the value of the item at a given position in the list. | Overrides ListInterface::set | |
| ItemList::__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::$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::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. | 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.