/** * {@inheritDoc} */ protected function triggerListener($listener, $eventName, Event $event) { parent::triggerListener($listener, $eventName, $event); if (null !== $this->logger) { $this->logger->debug(sprintf('Notified event "%s" to listener "%s".', $eventName, get_class($listener))); } $this->called[$eventName.'.'.get_class($listener)] = $this->getListenerInfo($listener, $eventName); if ($event->isPropagationStopped() && null !== $this->logger) { $this->logger->debug(sprintf('Listener "%s" stopped propagation of the event "%s".', get_class($listener), $eventName)); $skippedListeners = $this->getListeners($eventName); $skipped = false; foreach ($skippedListeners as $skippedListener) { if ($skipped) { $this->logger->debug(sprintf('Listener "%s" was not called for event "%s".', get_class($skippedListener), $eventName)); } if ($skippedListener === $listener) { $skipped = true; } } } }
public function testReEnteringAScope() { $event = new Event(); $service1 = $this->getMock('Symfony\\Bundle\\FrameworkBundle\\Tests\\Service'); $service1->expects($this->exactly(2))->method('onEvent')->with($event); $scope = new Scope('scope'); $container = new Container(); $container->addScope($scope); $container->enterScope('scope'); $container->set('service.listener', $service1, 'scope'); $dispatcher = new ContainerAwareEventDispatcher($container); $dispatcher->addListenerService('onEvent', array('service.listener', 'onEvent')); $dispatcher->dispatch('onEvent', $event); $service2 = $this->getMock('Symfony\\Bundle\\FrameworkBundle\\Tests\\Service'); $service2->expects($this->once())->method('onEvent')->with($event); $container->enterScope('scope'); $container->set('service.listener', $service2, 'scope'); $dispatcher->dispatch('onEvent', $event); $container->leaveScope('scope'); $dispatcher->dispatch('onEvent'); }
/** * {@inheritDoc} * * @throws \RuntimeException if the listener method is not callable */ public function addListener($eventName, $listener, $priority = 0) { if (!is_callable($listener)) { if (is_string($listener)) { $typeDefinition = '[string] ' . $listener; } elseif (is_array($listener)) { $typeDefinition = '[array] ' . (is_object($listener[0]) ? get_class($listener[0]) : $listener[0]) . '::' . $listener[1]; } elseif (is_object($listener)) { $typeDefinition = '[object] ' . get_class($listener); } else { $typeDefinition = '[?] ' . var_export($listener, true); } throw new \RuntimeException(sprintf('The given callback (%s) for event "%s" is not callable.', $typeDefinition, $eventName)); } parent::addListener($eventName, $listener, $priority); }
/** * {@inheritDoc} */ protected function triggerListener($listener, $eventName, Event $event) { parent::triggerListener($listener, $eventName, $event); $listenerString = $this->listenerToString($listener); if (null !== $this->logger) { $this->logger->debug(sprintf('Notified event "%s" to listener "%s"', $eventName, $listenerString)); } $this->called[$eventName . '.' . $listenerString] = array('class' => $listenerString, 'event' => $eventName); if ($event->isPropagationStopped() && null !== $this->logger) { $this->logger->debug(sprintf('Listener "%s" stopped propagation of the event "%s"', $this->listenerToString($listener), $eventName)); $skippedListeners = $this->getListeners($eventName); $skipped = false; foreach ($skippedListeners as $skippedListener) { if ($skipped) { $this->logger->debug(sprintf('Listener "%s" was not called for event "%s"', $this->listenerToString($skippedListener), $eventName)); } if ($skippedListener === $listener) { $skipped = false; } } } }
public function testRemoveBeforeDispatch() { $event = new Event(); $service = $this->getMock('Symfony\\Bundle\\FrameworkBundle\\Tests\\Service'); $container = new Container(); $container->set('service.listener', $service); $dispatcher = new ContainerAwareEventDispatcher($container); $dispatcher->addListenerService('onEvent', array('service.listener', 'onEvent')); $dispatcher->removeListener('onEvent', array($container->get('service.listener'), 'onEvent')); $this->assertFalse($dispatcher->hasListeners('onEvent')); }
public function testGetListenersOnLazyLoad() { $event = new Event(); $service = $this->getMock('Symfony\\Bundle\\FrameworkBundle\\Tests\\Service'); $container = new Container(); $container->set('service.listener', $service); $dispatcher = new ContainerAwareEventDispatcher($container); $dispatcher->addListenerService('onEvent', array('service.listener', 'onEvent')); $listeners = $dispatcher->getListeners(); $this->assertTrue(isset($listeners['onEvent'])); $this->assertEquals(1, count($dispatcher->getListeners('onEvent'))); }
/** * {@inheritDoc} */ protected function lazyLoad($eventName) { $e = $this->stopwatch->start($eventName . '.loading', 'event_listener_loading'); parent::lazyLoad($eventName); $e->stop(); }