%PDF- %PDF-
Direktori : /var/www/html/bbw/farmaci/kritik-portale/module/Basis/src/Basis/EventBus/ |
Current File : /var/www/html/bbw/farmaci/kritik-portale/module/Basis/src/Basis/EventBus/EventBus.php |
<?php /** * Created by PhpStorm. * User: juliangilles * Date: 17.03.14 * Time: 11:49 */ namespace Basis\EventBus; use Basis\Model\EventBasis, Zend\ServiceManager\FactoryInterface, Zend\ServiceManager\ServiceLocatorInterface, Zend\ServiceManager\ServiceManager; class EventBus implements FactoryInterface { /** * @var ServiceManager */ protected $_serviceLocator; protected $_handlers = array(); public function createService(ServiceLocatorInterface $serviceLocator) { $this->_serviceLocator = $serviceLocator; $config = $serviceLocator->get('Config'); $eventHandlerProviders = $config['event_sourcing']['event_handler_providers']; foreach ($eventHandlerProviders as $eventHandlerProvider) { if ($serviceLocator->has($eventHandlerProvider)) { $eventHandlerProvider = $serviceLocator->get($eventHandlerProvider); } else { $eventHandlerProvider = new $eventHandlerProvider(); } foreach ($eventHandlerProvider->getEventHandlers() as $eventHandlerClass) { if ($serviceLocator->has($eventHandlerClass)) { $eventHandler = $serviceLocator->get($eventHandlerClass); } else { $eventHandler = new $eventHandlerClass(); } if ($eventHandler instanceof \Basis\Handler\HandlerInterface) { $this->addHandler($eventHandler); } } } return $this; } private function addHandler($handler) { $this->_handlers[] = $handler; } public function publish(EventBasis $object) { $eventsTmp = $object->getEvents(); $events = array(); foreach ($eventsTmp as $event) { $event->setEntityId($object->getId()); $events[] = $event; } $object->setEvents($events); foreach ($this->_handlers as $handler) { $handler->setDatabaseAdapter($this->_serviceLocator->get("viewsDB")); $handler->handle($events); } } public function publishEvents(array $events) { foreach ($this->_handlers as $handler) { $handler->setDatabaseAdapter($this->_serviceLocator->get("viewsDB")); $handler->handle($events); } } }