Adds a service as event listener
public addListenerService ( string $eventName, array $callback, integer $priority ) | ||
$eventName | string | Event for which the listener is added |
$callback | array | The service ID of the listener service & the method name that has to be called |
$priority | integer | The higher this value, the earlier an event listener will be triggered in the chain. Defaults to 0. |
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'); }
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'))); }