metadataPool = $metadataPool; $this->hydratorPool = $hydratorPool; $this->typeResolver = $typeResolver; $this->eventManager = $eventManager; $this->readMain = $readMain; $this->readAttributes = $readAttributes; $this->readExtensions = $readExtensions; } /** * {@inheritDoc} */ public function execute($entity, $identifier, $arguments = []) { $entityType = $this->typeResolver->resolve($entity); $metadata = $this->metadataPool->getMetadata($entityType); $hydrator = $this->hydratorPool->getHydrator($entityType); $this->eventManager->dispatch( 'entity_manager_load_before', [ 'entity_type' => $entityType, 'identifier' => $identifier, 'arguments' => $arguments ] ); $this->eventManager->dispatchEntityEvent( $entityType, 'load_before', [ 'identifier' => $identifier, 'entity' => $entity, 'arguments' => $arguments ] ); $entity = $this->readMain->execute($entity, $identifier); $entityData = array_merge($hydrator->extract($entity), $arguments); if (isset($entityData[$metadata->getLinkField()])) { $entity = $this->readAttributes->execute($entity, $arguments); $entity = $this->readExtensions->execute($entity, $arguments); } $this->eventManager->dispatchEntityEvent( $entityType, 'load_after', [ 'entity' => $entity, 'arguments' => $arguments ] ); $this->eventManager->dispatch( 'entity_manager_load_after', [ 'entity_type' => $entityType, 'entity' => $entity, 'arguments' => $arguments ] ); return $entity; } }