저자: Fabien Potencier (fabien@symfony.com)
저자: Bernhard Schussek (bernhard.schussek@symfony.com)
상속: extends Symfony\Component\EventDispatcher\EventDispatcher
예제 #1
0
    /**
     * {@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);
 }
예제 #4
0
 /**
  * {@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();
 }