/**
  * {@inheritdoc}
  */
 public function process(tubepress_api_ioc_ContainerBuilderInterface $containerBuilder)
 {
     $consumerIds = $containerBuilder->findTaggedServiceIds(tubepress_api_ioc_ServiceTags::TAGGED_SERVICES_CONSUMER);
     foreach ($consumerIds as $consumerId => $tags) {
         $consumerDefinition = $containerBuilder->getDefinition($consumerId);
         foreach ($tags as $tagData) {
             $requiredAttribites = array('tag', 'method');
             foreach ($requiredAttribites as $attributeName) {
                 if (!isset($tagData[$attributeName])) {
                     throw new LogicException(sprintf('Service %s must specify %s in its tag data', $consumerId, $attributeName));
                 }
             }
             $matchingServiceIdsToTagData = $containerBuilder->findTaggedServiceIds($tagData['tag']);
             $references = $this->_buildMethodCallArgument($matchingServiceIdsToTagData);
             $consumerDefinition->addMethodCall($tagData['method'], array($references));
         }
     }
 }
 private function _doProcess(tubepress_api_ioc_ContainerBuilderInterface $containerBuilder, $serviceSuffix)
 {
     if (!$containerBuilder->hasDefinition('Twig_Loader_Filesystem' . $serviceSuffix)) {
         return;
     }
     $twigFsLoaderDefinition = $containerBuilder->getDefinition('Twig_Loader_Filesystem' . $serviceSuffix);
     $providerIds = $containerBuilder->findTaggedServiceIds('tubepress_spi_template_PathProviderInterface' . $serviceSuffix);
     foreach ($providerIds as $providerId => $tags) {
         /*
          * @var tubepress_spi_template_PathProviderInterface
          */
         $provider = $containerBuilder->get($providerId);
         $directories = $provider->getTemplateDirectories();
         foreach ($directories as $directory) {
             if (is_dir($directory)) {
                 $twigFsLoaderDefinition->addMethodCall('addPath', array($directory));
             }
         }
     }
 }
Пример #3
0
 /**
  * {@inheritdoc}
  */
 public function process(tubepress_api_ioc_ContainerBuilderInterface $containerBuilder)
 {
     if (!$containerBuilder->hasDefinition(tubepress_api_event_EventDispatcherInterface::_)) {
         return;
     }
     $eventDispatcherDefinition = $containerBuilder->getDefinition(tubepress_api_event_EventDispatcherInterface::_);
     $listenerServiceIds = $containerBuilder->findTaggedServiceIds(tubepress_api_ioc_ServiceTags::EVENT_LISTENER);
     foreach ($listenerServiceIds as $serviceId => $events) {
         foreach ($events as $event) {
             $priority = isset($event['priority']) ? $event['priority'] : 0;
             if (!isset($event['event'])) {
                 throw new InvalidArgumentException(sprintf('Service "%s" must define the "event" attribute on "%s" tags.', $serviceId, tubepress_api_ioc_ServiceTags::EVENT_LISTENER));
             }
             if (!isset($event['method'])) {
                 $onSuffix = preg_replace_callback(array('/(?<=\\b)[a-z]/i', '/[^a-z0-9]/i'), array($this, '_callbackStrToUpper'), $event['event']);
                 $event['method'] = 'on' . $onSuffix;
                 $event['method'] = preg_replace('/[^a-z0-9]/i', '', $event['method']);
             }
             $eventDispatcherDefinition->addMethodCall('addListenerService', array($event['event'], array($serviceId, $event['method']), $priority));
         }
     }
 }