예제 #1
0
 /**
  * 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);
         }
     }
 }