Example #1
0
 /**
  * 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));
         }
     }
 }