You are here

protected function EntityStorageBase::postLoad in Drupal 10

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Entity/EntityStorageBase.php \Drupal\Core\Entity\EntityStorageBase::postLoad()
  2. 9 core/lib/Drupal/Core/Entity/EntityStorageBase.php \Drupal\Core\Entity\EntityStorageBase::postLoad()

Attaches data to entities upon loading.

If there are multiple bundle classes involved, each one gets a sub array with only the entities of the same bundle. If there's only a single bundle, the entity's postLoad() method will get a copy of the original $entities array.

Parameters

array $entities: Associative array of query results, keyed on the entity ID.

3 calls to EntityStorageBase::postLoad()
ContentEntityStorageBase::loadMultipleRevisions in core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php
Loads multiple entity revisions.
ContentEntityStorageBase::loadUnchanged in core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php
Loads an unchanged entity from the database.
EntityStorageBase::loadMultiple in core/lib/Drupal/Core/Entity/EntityStorageBase.php
Loads one or more entities.

File

core/lib/Drupal/Core/Entity/EntityStorageBase.php, line 377

Class

EntityStorageBase
A base entity storage class.

Namespace

Drupal\Core\Entity

Code

protected function postLoad(array &$entities) {
  $entities_by_class = $this
    ->getEntitiesByClass($entities);

  // Invoke entity class specific postLoad() methods. If there's only a single
  // class involved, we want to pass in the original $entities array. For
  // example, to provide backwards compatibility with the legacy behavior of
  // the deprecated user_roles() method, \Drupal\user\Entity\Role::postLoad()
  // sorts the array to enforce role weights. We have to let it manipulate the
  // final array, not a subarray. However if there are multiple bundle classes
  // involved, we only want to pass each one the entities that match.
  if (count($entities_by_class) === 1) {
    $entity_class = array_key_first($entities_by_class);
    $entity_class::postLoad($this, $entities);
  }
  else {
    foreach ($entities_by_class as $entity_class => &$items) {
      $entity_class::postLoad($this, $items);
    }
  }
  $this
    ->moduleHandler()
    ->invokeAllWith('entity_load', function (callable $hook, string $module) use (&$entities) {
    $hook($entities, $this->entityTypeId);
  });
  $this
    ->moduleHandler()
    ->invokeAllWith($this->entityTypeId . '_load', function (callable $hook, string $module) use (&$entities) {
    $hook($entities);
  });
}