/** * Registers the tagged event listeners. * * @param ContainerBuilder $builder The service container builder. * @param Definition $dispatcher The event dispatcher definition. * * @throws Exception If the listener could not be registered. */ private function registerListeners(ContainerBuilder $builder, Definition $dispatcher) { $ids = $builder->findTaggedServiceIds('event.listener'); foreach ($ids as $id => $tags) { $listener = $builder->getDefinition($id); if ($listener->isAbstract()) { throw Exception::listenerIsAbstract($id); } if (!$listener->isPublic()) { throw Exception::listenerIsNotPublic($id); } foreach ($tags as $tag) { if (!isset($tag['event'])) { throw Exception::tagAttributeNotSet($id, 'event.listener', 'event'); } if (!isset($tag['method'])) { throw Exception::tagAttributeNotSet($id, 'event.listener', 'method'); } $dispatcher->addMethodCall('addListener', array($tag['event'], array(new Reference($id), $tag['method']), isset($tag['priority']) ? $tag['priority'] : 0)); } } }