/** * read the configuration and dispatch event * * @param $version * @param $entity * @param $eventName * @param ResourceCollectionInterface $resourceResolver * @param EventDispatcherInterface $dispatcher * * @return null * @throws \Exception */ public function dispatchEvent($version, $entity, $eventName, ResourceCollectionInterface $resourceResolver, EventDispatcherInterface $dispatcher) { /** @var \Eliberty\ApiBundle\Api\Resource $resource */ $resource = $resourceResolver->getResourceForEntityWithVersion(get_class($entity), $version); if (null === $resource) { $entityClass = get_class($entity); $shortName = substr($entityClass, strrpos($entityClass, '\\') + 1); $resource = $resourceResolver->getResourceForShortNameWithVersion($shortName, $version); } if (null === $resource) { return null; } if ($resource->hasEventListener($eventName)) { $events = $resource->getListener($eventName); foreach ($events as $eventData) { $event = $this->createEventClass($entity, $eventData); $eventName = isset($eventData['eventName']) ? $eventData['eventName'] : $eventName; $dispatcher->dispatch($eventName, $event); } } }