private function createCollector($type, $config) { $definition = new DefinitionDecorator('beberlei_metrics.collector_proto.' . $config['type']); // Theses listeners should be as late as possible $definition->addTag('kernel.event_listener', array('method' => 'flush', 'priority' => -1024, 'event' => 'kernel.terminate')); $definition->addTag('kernel.event_listener', array('method' => 'flush', 'priority' => -1024, 'event' => 'console.terminate')); switch ($type) { case 'doctrine_dbal': $ref = $config['connection'] ? sprintf('doctrine.dbal.%s_connection', $config['connection']) : 'database_connection'; $definition->replaceArgument(0, new Reference($ref)); return $definition; case 'graphite': $definition->replaceArgument(0, $config['host'] ?: 'localhost'); $definition->replaceArgument(1, $config['port'] ?: 2003); $definition->replaceArgument(2, $config['protocol'] ?: 'tcp'); return $definition; case 'librato': $definition->replaceArgument(1, $config['source']); $definition->replaceArgument(2, $config['username']); $definition->replaceArgument(3, $config['password']); return $definition; case 'logger': case 'null': return $definition; case 'statsd': $definition->replaceArgument(0, $config['host'] ?: 'localhost'); $definition->replaceArgument(1, $config['port'] ?: 8125); $definition->replaceArgument(2, (string) $config['prefix']); return $definition; case 'zabbix': $sender = new Definition('Net\\Zabbix\\Sender'); if ($config['file']) { $senderConfig = new Definition('Net\\Zabbix\\Agent\\Config'); $senderConfig->addArgument($config['file']); $sender->addMethodCall('importAgentConfig', array($senderConfig)); } else { $sender->addArgument($config['host'] ?: 'localhost'); $sender->addArgument((int) $config['port'] ?: 10051); } $definition->replaceArgument(0, $sender); $definition->replaceArgument(1, $config['prefix']); return $definition; case 'credis': $credis_client = new Definition('Credis_Client'); $credis_client->addArgument($config['host'] ?: 'localhost'); $credis_client->addArgument($config['port'] ?: 6379); $definition->replaceArgument(0, $credis_client); return $definition; default: throw new \InvalidArgumentException(sprintf('The type "%s" is not supported', $type)); } }
/** * {@inheritdoc} */ public function process(ContainerBuilder $container) { if ($container->hasDefinition('doctrine')) { $definition = new DefinitionDecorator('dag.form.type.object_to_identifier'); $definition->addArgument(new Reference('doctrine')); $definition->addArgument('dag_entity_to_identifier'); $definition->addTag('form.type', array('alias' => 'dag_entity_to_identifier')); $container->setDefinition('dag_entity_to_identifier', $definition); } if ($container->hasDefinition('doctrine_mongodb')) { $definition = new DefinitionDecorator('dag.form.type.object_to_identifier'); $definition->addArgument(new Reference('doctrine_mongodb')); $definition->addArgument('dag_document_to_identifier'); $definition->addTag('form.type', array('alias' => 'dag_document_to_identifier')); $container->setDefinition('dag_document_to_identifier', $definition); if (!$container->hasDefinition('dag_entity_to_identifier')) { $container->setAlias('dag_entity_to_identifier', 'dag_document_to_identifier'); } } if ($container->hasDefinition('doctrine_phpcr')) { $definition = new DefinitionDecorator('dag.form.type.object_to_identifier'); $definition->addArgument(new Reference('doctrine_phpcr')); $definition->addArgument('dag_phpcr_document_to_identifier'); $definition->addTag('form.type', array('alias' => 'dag_phpcr_document_to_identifier')); $container->setDefinition('dag_phpcr_document_to_identifier', $definition); if (!$container->hasDefinition('dag_entity_to_identifier')) { $container->setAlias('dag_entity_to_identifier', 'dag_phpcr_document_to_identifier'); } } }
private function createConverter($name, array $config, ContainerBuilder $container) { $environment = new DefinitionDecorator($config['environment']); $environment->setPublic(false); $environment->setClass($container->getDefinition($config['environment'])->getClass()); $environment->addMethodCall('mergeConfig', [$config['config']]); $environment->addTag('webuni_commonmark.environment.extensions', $config['extensions']); // $environment->addTag('webuni_commonmark.environment', ['parent' => $config['environment'], 'extensions' => [$config['extensions']]); $environmentName = 'webuni_commonmark.' . $name . '_environment' . $config['environment']; $container->setDefinition($environmentName, $environment); $parser = new DefinitionDecorator($config['parser']); $parser->setPublic(false); $parser->setClass($container->getDefinition($config['parser'])->getClass()); $parser->replaceArgument(0, new Reference($environmentName)); $renderer = new DefinitionDecorator($config['renderer']); $renderer->setPublic(false); $renderer->setClass($container->getDefinition($config['renderer'])->getClass()); $renderer->replaceArgument(0, new Reference($environmentName)); $converter = new DefinitionDecorator($config['converter']); $converter->setPublic(true); $converter->setClass($container->getDefinition($config['converter'])->getClass()); $converter->replaceArgument(0, $parser); $converter->replaceArgument(1, $renderer); $converterName = 'webuni_commonmark.' . $name . '_converter'; $container->setDefinition($converterName, $converter); return $converterName; }
/** * @param ContainerBuilder $container * * @throws \InvalidArgumentException */ public function process(ContainerBuilder $container) { $config = $container->getExtensionConfig('elastica')[0]; $jsonLdFrameLoader = $container->get('nemrod.elastica.jsonld.frame.loader.filesystem'); $confManager = $container->getDefinition('nemrod.elastica.config_manager'); $filiationBuilder = $container->get('nemrod.filiation.builder'); $jsonLdFrameLoader->setFiliationBuilder($filiationBuilder); foreach ($config['indexes'] as $name => $index) { $indexName = isset($index['index_name']) ? $index['index_name'] : $name; foreach ($index['types'] as $typeName => $settings) { $jsonLdFrameLoader->setEsIndex($name); $frame = $jsonLdFrameLoader->load($settings['frame'], null, true, true, true); $type = !empty($frame['@type']) ? $frame['@type'] : $settings['type']; if (empty($type)) { throw \Exception("You must provide a RDF Type."); } //type $typeId = 'nemrod.elastica.type.' . $name . '.' . $typeName; $indexId = 'nemrod.elastica.index.' . $name; $typeDef = new DefinitionDecorator('nemrod.elastica.type.abstract'); $typeDef->replaceArgument(0, $type); $typeDef->setFactory(array(new Reference($indexId), 'getType')); $typeDef->addTag('nemrod.elastica.type', array('index' => $name, 'name' => $typeName, 'type' => $type)); $container->setDefinition($typeId, $typeDef); //registering config to configManager $confManager->addMethodCall('setTypeConfigurationArray', array($name, $typeName, $type, $frame)); } } }
/** * {@inheritDoc} */ public function load(array $configs, ContainerBuilder $container) { $configuration = new Configuration(); $config = $this->processConfiguration($configuration, $configs); $loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); $loader->load('services.xml'); if (array_key_exists('servers', $config)) { foreach ($config['servers'] as $id => $server) { $container->setParameter('json_rpc.serializer.class', $server['serializer']); $container->setParameter('json_rpc.reflection.class', $server['reflection']); $definition = new DefinitionDecorator('json_rpc.server'); $definition->addTag('json_rpc.servers', array('resource' => $id)); foreach ($server['services'] as $service) { $definition->addMethodCall('addService', array($service['namespace'], $service['class'])); } $container->setDefinition(sprintf('json_rpc.server.%s', $id), $definition); $definition = new DefinitionDecorator('json_rpc.transport.internal'); $definition->addTag('json_rpc.transports'); $definition->replaceArgument(0, new Reference(sprintf('json_rpc.server.%s', $id))); $container->setDefinition(sprintf('json_rpc.transport.internal.%s', $id), $definition); $definition = new DefinitionDecorator('json_rpc.client.internal'); $definition->addTag('json_rpc.clients.internal'); $definition->replaceArgument(0, new Reference(sprintf('json_rpc.transport.internal.%s', $id))); $container->setDefinition(sprintf('json_rpc.client.internal.%s', $id), $definition); } } }
/** * @inheritdoc */ public function process(ContainerBuilder $container) { if (!$container->hasDefinition('qimnet.crud.configuration.repository')) { return; } $repository = $container->getDefinition('qimnet.crud.configuration.repository'); $defaults = $container->getParameter('qimnet.crud.defaults'); foreach ($container->getParameter('qimnet.crud.services') as $name => $configuration) { $options = $configuration['options'] + array('name' => $name) + $defaults['options']; $configuration = $configuration + $defaults; $serviceId = 'qimnet.crud.configuration.' . strtolower($name); $definition = new DefinitionDecorator('qimnet.crud.configuration'); foreach (array('object_manager_factory', 'security_context_factory', 'path_generator_factory') as $index => $key) { if ($configuration[$key]) { $definition->replaceArgument($index, new Reference($configuration[$key])); } } $definition->addArgument($options); if ($configuration['class']) { $definition->setClass($configuration['class']); } $definition->addTag('qimnet.crud.configuration', array('alias' => $name, 'object_class' => $options['object_class'], 'worker' => $configuration['worker'], 'redirection_manager' => $configuration['redirection_manager'])); $container->setDefinition($serviceId, $definition); } $taggedServices = $container->findTaggedServiceIds('qimnet.crud.configuration'); foreach ($taggedServices as $id => $attributes) { $repository->addMethodCall('add', array($attributes[0]['alias'], $attributes[0]['object_class'], $id, $attributes[0]['worker'], $attributes[0]['redirection_manager'])); } }
/** * {@inheritDoc} */ public function create(ContainerBuilder $container, $loaderName, array $config) { $loaderDefinition = new DefinitionDecorator('liip_imagine.binary.loader.prototype.filesystem'); $loaderDefinition->replaceArgument(2, $config['data_root']); $loaderDefinition->addTag('liip_imagine.binary.loader', array('loader' => $loaderName)); $loaderId = 'liip_imagine.binary.loader.' . $loaderName; $container->setDefinition($loaderId, $loaderDefinition); return $loaderId; }
/** * {@inheritdoc} */ public function create(ContainerBuilder $container, $resolverName, array $config) { $resolverDefinition = new DefinitionDecorator('liip_imagine.cache.resolver.prototype.web_path'); $resolverDefinition->replaceArgument(2, $config['web_root']); $resolverDefinition->replaceArgument(3, $config['cache_prefix']); $resolverDefinition->addTag('liip_imagine.cache.resolver', array('resolver' => $resolverName)); $resolverId = 'liip_imagine.cache.resolver.' . $resolverName; $container->setDefinition($resolverId, $resolverDefinition); return $resolverId; }
/** * {@inheritdoc} */ public function create(ContainerBuilder $container, $resolverName, array $config) { $resolverDefinition = new DefinitionDecorator('liip_imagine.cache.resolver.prototype.flysystem'); $resolverDefinition->replaceArgument(0, new Reference($config['filesystem_service'])); $resolverDefinition->replaceArgument(2, $config['root_url']); $resolverDefinition->replaceArgument(3, $config['cache_prefix']); $resolverDefinition->addTag('liip_imagine.cache.resolver', array('resolver' => $resolverName)); $resolverId = 'liip_imagine.cache.resolver.' . $resolverName; $container->setDefinition($resolverId, $resolverDefinition); return $resolverId; }
/** * @expectedException \InvalidArgumentException * @expectedExceptionMessage Invalid "cache.pool" tag for service "app.cache_pool": accepted attributes are */ public function testThrowsExceptionWhenCachePoolTagHasUnknownAttributes() { $container = new ContainerBuilder(); $adapter = new Definition(); $adapter->setAbstract(true); $adapter->addTag('cache.pool'); $container->setDefinition('app.cache_adapter', $adapter); $cachePool = new DefinitionDecorator('app.cache_adapter'); $cachePool->addTag('cache.pool', array('foobar' => 123)); $container->setDefinition('app.cache_pool', $cachePool); $this->cachePoolPass->process($container); }
/** * {@inheritDoc} */ public function create(ContainerBuilder $container, $loaderName, array $config) { $loaderDefinition = new DefinitionDecorator('liip_imagine.binary.loader.prototype.stream'); $loaderDefinition->replaceArgument(0, $config['wrapper']); $loaderDefinition->replaceArgument(1, $config['context']); $loaderDefinition->addTag('liip_imagine.binary.loader', array( 'loader' => $loaderName, )); $loaderId = 'liip_imagine.binary.loader.'.$loaderName; $container->setDefinition($loaderId, $loaderDefinition); return $loaderId; }
/** * @expectedException \InvalidArgumentException * @expectedExceptionMessage Invalid "cache.pool" tag for service "app.cache_pool": accepted attributes are */ public function testThrowsExceptionWhenCachePoolTagHasUnknownAttributes() { $container = new ContainerBuilder(); $container->setParameter('kernel.debug', false); $container->setParameter('kernel.name', 'app'); $container->setParameter('kernel.environment', 'prod'); $container->setParameter('kernel.root_dir', 'foo'); $adapter = new Definition(); $adapter->setAbstract(true); $adapter->addTag('cache.pool'); $container->setDefinition('app.cache_adapter', $adapter); $cachePool = new DefinitionDecorator('app.cache_adapter'); $cachePool->addTag('cache.pool', array('foobar' => 123)); $container->setDefinition('app.cache_pool', $cachePool); $this->cachePoolPass->process($container); }
/** * {@inheritdoc} */ protected function loadInternal(array $configs, ContainerBuilder $container) { $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); $loader->load('controller.xml'); foreach ($configs['filters'] as $name => $settings) { if (!$settings['enabled']) { continue; } $loader->load('filters/' . $name . '.xml'); foreach ($settings['apply_to'] as $i => $pattern) { $worker = new DefinitionDecorator('assetic.worker.ensure_filter'); $worker->replaceArgument(0, '/' . $pattern . '/'); $worker->replaceArgument(1, new Reference('assetic.filter.' . $name)); $worker->addTag('assetic.factory_worker'); $container->setDefinition('assetic.filter.' . $name . '.worker' . $i, $worker); } } }
private function configureConnectionClient(ContainerBuilder $builder, $connectionName, array $connectionConfig, $profiling) { $connectionDef = new DefinitionDecorator('kassko_cassandra.connection.prototype'); $connectionDef->addTag('kassko_cassandra.connection'); //logger Cql creation. $loggerCqlServiceName = $this->computeLoggerCqlServiceName($connectionName); $loggerCqlServiceDef = new DefinitionDecorator('kassko_cassandra.logger_cql.prototype'); if (isset($connectionConfig['logger_service'])) { $loggerCqlServiceDef->replaceArgument(0, new Reference($connectionConfig['logger_service'])); } $builder->setDefinition($loggerCqlServiceName, $loggerCqlServiceDef); //loggerChain creation. $loggerChainServiceName = $this->computeLoggerChainServiceName($connectionName); $loggerChainDef = new DefinitionDecorator('kassko_cassandra.logger_chain.prototype'); $builder->setDefinition($loggerChainServiceName, $loggerChainDef); $loggerChainDef->addMethodCall('addLogger', [new Reference($loggerCqlServiceName)]); if ($profiling) { $loggerProfilerServiceName = $this->computeLoggerProfilerServiceName($connectionName); $builder->setDefinition($loggerProfilerServiceName, new DefinitionDecorator('kassko_cassandra.logger_profiler.prototype')); $loggerChainDef->addMethodCall('addLogger', [new Reference($loggerProfilerServiceName)]); $queryStatsManagerDef = $builder->getDefinition('kassko_cassandra.query_stats.manager'); $queryStatsManagerDef->addMethodCall('addLogger', [$connectionName, new Reference($loggerProfilerServiceName)]); } if (isset($connectionConfig['event_dispatcher_service'])) { $connectionDef->addMethodCall('setEventDispatcher', [new Reference($connectionConfig['event_dispatcher_service'])]); } $connectionDef->addMethodCall('setLogger', [new Reference($loggerChainServiceName)]); $connectionDef->addMethodCall('useKeyspace', [$connectionConfig['keyspace']]); list($dsn, $username, $password) = $this->resolveConnectionParam($connectionConfig); if (null === $username xor null === $password) { throw new \LogicException(sprintf('username and password should be provided both or neither for keyspace "%s".', $connectionConfig['keyspace'])); } if (null !== $username) { $connectionDef->setArguments([$dsn, $username, $password]); } else { $connectionDef->setArguments([$dsn]); } $serviceName = $this->computeServiceName($connectionName); $builder->setDefinition($serviceName, $connectionDef); if (isset($connectionConfig['alias'])) { $builder->setAlias($connectionConfig['alias'], $serviceName); } }
/** * {@inheritdoc} */ public function load(array $configs, ContainerBuilder $container) { $configuration = new Configuration(); $config = $this->processConfiguration($configuration, $configs); $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); $loader->load('services.yml'); foreach ($config as $key => $stateMachineConfig) { $stateMachineConfig = $this->removeDisabledCallbacks($stateMachineConfig); $definition = new DefinitionDecorator('bangpound_finite.container_loader'); $definition->replaceArgument(0, $stateMachineConfig); $definition->addTag('bangpound_finite.loader'); // setLazy method wasn't available before 2.3, FiniteBundle requirement is ~2.1 if (method_exists($definition, 'setLazy')) { $definition->setLazy(true); } $serviceId = 'bangpound_finite.loader.' . $key; $container->setDefinition($serviceId, $definition); } }
/** * {@inheritdoc} */ public function process(ContainerBuilder $container) { if ($container->hasDefinition('doctrine')) { $definition = new DefinitionDecorator('sylius.form.type.object_to_identifier'); $definition->addArgument(new Reference('doctrine')); $definition->addArgument('sylius_entity_to_identifier'); $definition->addTag('form.type', ['alias' => 'sylius_entity_to_identifier']); $container->setDefinition('sylius_entity_to_identifier', $definition); $definition = $container->findDefinition('sylius.form.type.entity_hidden'); $definition->replaceArgument(0, new Reference('doctrine')); } if ($container->hasDefinition('doctrine_mongodb')) { $definition = new DefinitionDecorator('sylius.form.type.object_to_identifier'); $definition->addArgument(new Reference('doctrine_mongodb')); $definition->addArgument('sylius_document_to_identifier'); $definition->addTag('form.type', ['alias' => 'sylius_document_to_identifier']); $container->setDefinition('sylius_document_to_identifier', $definition); if (!$container->hasDefinition('sylius_entity_to_identifier')) { $container->setAlias('sylius_entity_to_identifier', 'sylius_document_to_identifier'); } if (!$container->hasDefinition('doctrine')) { $definition = $container->findDefinition('sylius.form.type.entity_hidden'); $definition->replaceArgument(0, new Reference('doctrine_mongodb')); } } if ($container->hasDefinition('doctrine_phpcr')) { $definition = new DefinitionDecorator('sylius.form.type.object_to_identifier'); $definition->addArgument(new Reference('doctrine_phpcr')); $definition->addArgument('sylius_phpcr_document_to_identifier'); $definition->addTag('form.type', ['alias' => 'sylius_phpcr_document_to_identifier']); $container->setDefinition('sylius_phpcr_document_to_identifier', $definition); if (!$container->hasDefinition('sylius_entity_to_identifier')) { $container->setAlias('sylius_entity_to_identifier', 'sylius_phpcr_document_to_identifier'); } } }
public function load(array $configs, ContainerBuilder $container) { $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); $loader->load('services.xml'); $processor = new Processor(); $configuration = $this->getConfiguration($configs, $container); $config = $processor->processConfiguration($configuration, $configs); $filterDef = $container->getDefinition('the_island.assetic.filter.node_scss'); foreach ($config['load_paths'] as $loadPath) { $filterDef->addMethodCall('addLoadPath', [$loadPath]); } unset($config['load_paths']); if (isset($config['apply_to']) && $config['apply_to']) { $worker = new DefinitionDecorator('assetic.worker.ensure_filter'); $worker->replaceArgument(0, '/' . $config['apply_to'] . '/'); $worker->replaceArgument(1, new Reference('the_island.assetic.filter.node_scss')); $worker->addTag('assetic.factory_worker'); $container->setDefinition('the_island.assetic.filter.node_scss.worker', $worker); unset($config['apply_to']); } foreach ($config as $key => $value) { $container->setParameter('the_island.assetic.filter.node_scss.' . $key, $value); } }
private function registerCacheConfiguration(array $config, ContainerBuilder $container) { $version = substr(str_replace('/', '-', base64_encode(md5(uniqid(mt_rand(), true), true))), 0, -2); $container->getDefinition('cache.adapter.apcu')->replaceArgument(2, $version); $container->getDefinition('cache.adapter.system')->replaceArgument(2, $version); $container->getDefinition('cache.adapter.filesystem')->replaceArgument(2, $config['directory']); foreach (array('doctrine', 'psr6', 'redis') as $name) { if (isset($config[$name = 'default_' . $name . '_provider'])) { $container->setAlias('cache.' . $name, Compiler\CachePoolPass::getServiceProvider($container, $config[$name])); } } foreach (array('app', 'system') as $name) { $config['pools']['cache.' . $name] = array('adapter' => $config[$name], 'public' => true); } foreach ($config['pools'] as $name => $pool) { $definition = new DefinitionDecorator($pool['adapter']); $definition->setPublic($pool['public']); unset($pool['adapter'], $pool['public']); $definition->addTag('cache.pool', $pool); $container->setDefinition($name, $definition); } if (method_exists(PropertyAccessor::class, 'createCache')) { $propertyAccessDefinition = $container->register('cache.property_access', AdapterInterface::class); $propertyAccessDefinition->setPublic(false); $propertyAccessDefinition->setFactory(array(PropertyAccessor::class, 'createCache')); $propertyAccessDefinition->setArguments(array(null, null, $version, new Reference('logger', ContainerInterface::IGNORE_ON_INVALID_REFERENCE))); $propertyAccessDefinition->addTag('cache.pool', array('clearer' => 'cache.default_clearer')); $propertyAccessDefinition->addTag('monolog.logger', array('channel' => 'cache')); } $this->addClassesToCompile(array('Symfony\\Component\\Cache\\Adapter\\ApcuAdapter', 'Symfony\\Component\\Cache\\Adapter\\FilesystemAdapter', 'Symfony\\Component\\Cache\\CacheItem')); }
/** * Loads doctrine listeners to handle indexing of new or updated objects. * * @param array $typeConfig * @param ContainerBuilder $container * @param string $objectPersisterId * @param string $indexName * @param string $typeName * * @return string */ private function loadTypeListener(array $typeConfig, ContainerBuilder $container, $objectPersisterId, $indexName, $typeName) { if (isset($typeConfig['listener']['service'])) { return $typeConfig['listener']['service']; } /* Note: listener services may conflict with "prototype.driver", if the * index and type names were "prototype" and a driver, respectively. */ $abstractListenerId = sprintf('fos_elastica.listener.prototype.%s', $typeConfig['driver']); $listenerId = sprintf('fos_elastica.listener.%s.%s', $indexName, $typeName); $listenerDef = new DefinitionDecorator($abstractListenerId); $listenerDef->replaceArgument(0, new Reference($objectPersisterId)); $listenerDef->replaceArgument(2, array('identifier' => $typeConfig['identifier'], 'indexName' => $indexName, 'typeName' => $typeName)); $listenerDef->replaceArgument(3, $typeConfig['listener']['logger'] ? new Reference($typeConfig['listener']['logger']) : null); $tagName = null; switch ($typeConfig['driver']) { case 'orm': $tagName = 'doctrine.event_listener'; break; case 'phpcr': $tagName = 'doctrine_phpcr.event_listener'; break; case 'mongodb': $tagName = 'doctrine_mongodb.odm.event_listener'; break; } if (null !== $tagName) { foreach ($this->getDoctrineEvents($typeConfig) as $event) { $listenerDef->addTag($tagName, array('event' => $event)); } } $container->setDefinition($listenerId, $listenerDef); return $listenerId; }
/** * Register logger subscriber * * @param string $handlerKey * @param ContainerBuilder $container */ private function registerLoggerSubscriber($handlerKey, ContainerBuilder $container) { $eventDispatcherId = 'api.handler.' . $handlerKey . '.event_dispatcher'; $subscriberId = 'api.handler.' . $handlerKey . '.subscriber.logger'; $subscriberDefinition = new DefinitionDecorator('api.subscriber.logger_abstract'); $subscriberDefinition->addTag('monolog.logger', ['channel' => $this->getLoggerChannelForHandler($handlerKey)]); $container->setDefinition($subscriberId, $subscriberDefinition); $container->getDefinition($eventDispatcherId)->addMethodCall('addSubscriber', [new Reference($subscriberId)]); }
/** * Loads doctrine listeners to handle indexing of new or updated objects. * * @param array $typeConfig * @param ContainerBuilder $container * @param string $objectPersisterId * @param string $indexName * @param string $typeName * @return string */ private function loadTypeListener(array $typeConfig, ContainerBuilder $container, $objectPersisterId, $indexName, $typeName) { if (isset($typeConfig['listener']['service'])) { return $typeConfig['listener']['service']; } /* Note: listener services may conflict with "prototype.driver", if the * index and type names were "prototype" and a driver, respectively. */ $abstractListenerId = sprintf('fos_elastica.listener.prototype.%s', $typeConfig['driver']); $listenerId = sprintf('fos_elastica.listener.%s.%s', $indexName, $typeName); $listenerDef = new DefinitionDecorator($abstractListenerId); $listenerDef->replaceArgument(0, new Reference($objectPersisterId)); $listenerDef->replaceArgument(1, $this->getDoctrineEvents($typeConfig)); $listenerConfig = array('identifier' => $typeConfig['identifier'], 'indexName' => $indexName, 'typeName' => $typeName); if ($typeConfig['listener']['logger']) { $listenerDef->replaceArgument(4, new Reference($typeConfig['listener']['logger'])); } switch ($typeConfig['driver']) { case 'orm': $listenerDef->addTag('doctrine.event_subscriber'); break; case 'mongodb': $listenerDef->addTag('doctrine_mongodb.odm.event_subscriber'); break; } if ($typeConfig['listener']['async']) { $listenerDef->setPublic(true); $listenerDef->addTag('kernel.event_listener', array('event' => 'kernel.terminate', 'method' => 'onKernelTerminate')); $listenerDef->addTag('kernel.event_listener', array('event' => 'console.terminate', 'method' => 'onConsoleTerminate')); $listenerConfig['async'] = true; $listenerConfig['defer'] = true; } $listenerDef->replaceArgument(3, $listenerConfig); $container->setDefinition($listenerId, $listenerDef); return $listenerId; }
private function loadPublishers(array $config, ContainerBuilder $container) { foreach ($config as $name => $publisherConfig) { $transport = $publisherConfig['transport']['type']; $parameters = $publisherConfig['transport']['parameters']; switch ($transport) { case 'amqp': $publisher = new DefinitionDecorator('event_band.transport.amqp.publisher'); $publisher->replaceArgument(0, new Reference(self::getAmqpDriverId($parameters['connection'])))->replaceArgument(1, new Reference(self::getAmqpConverterId($parameters['converter'])))->replaceArgument(2, $parameters['exchange'])->replaceArgument(3, new Reference(self::getRouterId($parameters['router'])))->replaceArgument(4, $parameters['persistent'])->replaceArgument(5, $parameters['mandatory'])->replaceArgument(6, $parameters['immediate']); $container->setDefinition(self::getPublisherId($name), $publisher); break; default: throw new \Exception('Not implemented'); } $listener = new DefinitionDecorator('event_band.publish_listener'); $listener->replaceArgument(0, new Reference(self::getPublisherId($name)))->replaceArgument(1, $publisherConfig['propagation']); foreach ($publisherConfig['events'] as $event) { $listener->addTag('event_band.subscription', ['event' => $event, 'priority' => $publisherConfig['priority']]); } $container->setDefinition(self::getListenerId($name), $listener); } }
/** * Creates a subscriber definition. * * @param string $adapterName The adatper name. * @param string $subscriberName The subscriber name. * @param array|string $configuration The configuration. * * @return \Symfony\Component\DependencyInjection\DefinitionDecorator The subscriber definition. */ private function createSubscriberDefinition($adapterName, $subscriberName, $configuration, ContainerBuilder $container) { $parent = self::createServiceName('subscriber.' . $subscriberName); $subscriber = new DefinitionDecorator($parent); $subscriber->setClass($container->getDefinition($parent)->getClass()); $subscriber->addTag(RegisterListenerCompilerPass::SUBSCRIBER_TAG, array('adapter' => $adapterName)); switch ($subscriberName) { case 'basic_auth': $this->configureBasicAuthSubscriberDefinition($subscriber, $configuration, $adapterName, $container); break; case 'cookie': $this->configureCookieSubscriberDefinition($subscriber, $configuration); break; case 'history': $this->configureHistorySubscriberDefinition($subscriber, $configuration); break; case 'logger': $this->configureLoggerSubscriberDefinition($subscriber, $configuration); break; case 'redirect': $this->configureRedirectSubscriberDefinition($subscriber, $configuration, $adapterName, $container); break; case 'retry': $this->configureRetrySubscriberDefinition($subscriber, $adapterName, $container); break; case 'stopwatch': $this->configureStopwatchSubscriberDefinition($subscriber, $configuration); break; } return $subscriber; }
/** * Loads the configured indexes. * * @param array $indexes An array of indexes configurations * @param ContainerBuilder $container A ContainerBuilder instance * @throws \InvalidArgumentException * @return array */ private function loadIndexes(array $indexes, ContainerBuilder $container) { $confManager = $container->getDefinition('nemrod.elastica.config_manager'); $indexRegistry = $container->getDefinition('nemrod.elastica.index_registry'); foreach ($indexes as $name => $index) { $indexId = sprintf('nemrod.elastica.index.%s', $name); $indexName = isset($index['index_name']) ? $index['index_name'] : $name; $indexDef = new DefinitionDecorator('nemrod.elastica.index.abstract'); $indexDef->replaceArgument(0, $indexName); $indexDef->addTag('nemrod.elastica.index', array('name' => $name)); if (isset($index['client'])) { $clientId = 'nemrod.elastica.client.' . $index['client']; $indexDef->setFactory(array(new Reference($clientId), 'getIndex')); } $container->setDefinition($indexId, $indexDef); $reference = new Reference($indexId); $this->indexConfigs[$name] = array('elasticsearch_name' => $indexName, 'reference' => $reference, 'name' => $name, 'settings' => $index['settings']); $confManager->addMethodCall('setIndexConfigurationArray', array($name, $this->indexConfigs[$name])); $indexRegistry->addMethodCall('registerIndex', array($name, $reference)); } }
/** * Loads the configuration. * * @param array $configs An array of configuration settings * @param ContainerBuilder $container A ContainerBuilder instance */ public function load(array $configs, ContainerBuilder $container) { $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); $loader->load('assetic.xml'); $loader->load('templating_twig.xml'); $loader->load('templating_php.xml'); $def = $container->getDefinition('assetic.parameter_bag'); if (method_exists($def, 'setFactory')) { // to be inlined in assetic.xml when dependency on Symfony DependencyInjection is bumped to 2.6 $def->setFactory(array(new Reference('service_container'), 'getParameterBag')); } else { // to be removed when dependency on Symfony DependencyInjection is bumped to 2.6 $def->setFactoryService('service_container'); $def->setFactoryMethod('getParameterBag'); } $processor = new Processor(); $configuration = $this->getConfiguration($configs, $container); $config = $processor->processConfiguration($configuration, $configs); $container->setParameter('assetic.debug', $config['debug']); $container->setParameter('assetic.use_controller', $config['use_controller']['enabled']); $container->setParameter('assetic.enable_profiler', $config['use_controller']['profiler']); $container->setParameter('assetic.read_from', $config['read_from']); $container->setParameter('assetic.write_to', $config['write_to']); $container->setParameter('assetic.variables', $config['variables']); $container->setParameter('assetic.java.bin', $config['java']); $container->setParameter('assetic.node.bin', $config['node']); $container->setParameter('assetic.node.paths', $config['node_paths']); $container->setParameter('assetic.ruby.bin', $config['ruby']); $container->setParameter('assetic.scss.bin', $config['scss']); // register formulae $formulae = array(); foreach ($config['assets'] as $name => $formula) { $formulae[$name] = array($formula['inputs'], $formula['filters'], $formula['options']); } if ($formulae) { $container->getDefinition('assetic.config_resource')->replaceArgument(0, $formulae); } else { $container->removeDefinition('assetic.config_loader'); $container->removeDefinition('assetic.config_resource'); } // register filters foreach ($config['filters'] as $name => $filter) { if (isset($filter['resource'])) { $loader->load($container->getParameterBag()->resolveValue($filter['resource'])); unset($filter['resource']); } else { $loader->load('filters/' . $name . '.xml'); } if (isset($filter['file'])) { $container->getDefinition('assetic.filter.' . $name)->setFile($filter['file']); unset($filter['file']); } if (isset($filter['apply_to'])) { if (!is_array($filter['apply_to'])) { $filter['apply_to'] = array($filter['apply_to']); } foreach ($filter['apply_to'] as $i => $pattern) { $worker = new DefinitionDecorator('assetic.worker.ensure_filter'); $worker->replaceArgument(0, '/' . $pattern . '/'); $worker->replaceArgument(1, new Reference('assetic.filter.' . $name)); $worker->addTag('assetic.factory_worker'); $container->setDefinition('assetic.filter.' . $name . '.worker' . $i, $worker); } unset($filter['apply_to']); } foreach ($filter as $key => $value) { $container->setParameter('assetic.filter.' . $name . '.' . $key, $value); } } // twig functions $container->setParameter('assetic.twig_extension.functions', $config['twig']['functions']); // choose dynamic or static if ($useController = $container->getParameterBag()->resolveValue($container->getParameterBag()->get('assetic.use_controller'))) { $loader->load('controller.xml'); $container->getDefinition('assetic.helper.dynamic')->addTag('templating.helper', array('alias' => 'assetic')); $container->removeDefinition('assetic.helper.static'); } else { $container->getDefinition('assetic.helper.static')->addTag('templating.helper', array('alias' => 'assetic')); $container->removeDefinition('assetic.helper.dynamic'); } $container->setParameter('assetic.bundles', $config['bundles']); $this->addClassesToCompile(array('Symfony\\Bundle\\AsseticBundle\\DefaultValueSupplier', 'Symfony\\Bundle\\AsseticBundle\\Factory\\AssetFactory')); if ($config['workers']['cache_busting']['enabled']) { $container->getDefinition('assetic.worker.cache_busting')->addTag('assetic.factory_worker'); } }
private function registerCacheConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader) { foreach ($config['pools'] as $name => $poolConfig) { $poolDefinition = new DefinitionDecorator($poolConfig['adapter']); $poolDefinition->setPublic($poolConfig['public']); unset($poolConfig['adapter'], $poolConfig['public']); $poolDefinition->addTag('cache.pool', $poolConfig); $container->setDefinition('cache.pool.' . $name, $poolDefinition); } $this->addClassesToCompile(array('Psr\\Cache\\CacheItemInterface', 'Psr\\Cache\\CacheItemPoolInterface', 'Symfony\\Component\\Cache\\Adapter\\AdapterInterface', 'Symfony\\Component\\Cache\\Adapter\\AbstractAdapter', 'Symfony\\Component\\Cache\\CacheItem')); }
/** * Loads the configuration. * * @param array $configs An array of configuration settings * @param ContainerBuilder $container A ContainerBuilder instance */ public function load(array $configs, ContainerBuilder $container) { $bundles = $container->getParameter('kernel.bundles'); $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); $loader->load('assetic.xml'); $loader->load('templating_twig.xml'); $loader->load('templating_php.xml'); $processor = new Processor(); $configuration = new MainConfiguration(array_keys($bundles)); $config = $processor->processConfiguration($configuration, $configs); $container->setParameter('assetic.debug', $config['debug']); $container->setParameter('assetic.use_controller', $config['use_controller']); $container->setParameter('assetic.read_from', $config['read_from']); $container->setParameter('assetic.write_to', $config['write_to']); $container->setParameter('assetic.java.bin', $config['java']); $container->setParameter('assetic.node.bin', $config['node']); $container->setParameter('assetic.sass.bin', $config['sass']); // register formulae $formulae = array(); foreach ($config['assets'] as $name => $formula) { $formulae[$name] = array($formula['inputs'], $formula['filters'], $formula['options']); } if ($formulae) { $container->getDefinition('assetic.config_resource')->replaceArgument(0, $formulae); } else { $container->removeDefinition('assetic.config_loader'); $container->removeDefinition('assetic.config_resource'); } // register filters foreach ($config['filters'] as $name => $filter) { if (isset($filter['resource'])) { $loader->load($container->getParameterBag()->resolveValue($filter['resource'])); unset($filter['resource']); } else { $loader->load('filters/' . $name . '.xml'); } if (isset($filter['file'])) { $container->getDefinition('assetic.filter.' . $name)->setFile($filter['file']); unset($filter['file']); } if (isset($filter['apply_to'])) { if (!is_array($filter['apply_to'])) { $filter['apply_to'] = array($filter['apply_to']); } foreach ($filter['apply_to'] as $i => $pattern) { $worker = new DefinitionDecorator('assetic.worker.ensure_filter'); $worker->replaceArgument(0, '/' . $pattern . '/'); $worker->replaceArgument(1, new Reference('assetic.filter.' . $name)); $worker->addTag('assetic.factory_worker'); $container->setDefinition('assetic.filter.' . $name . '.worker' . $i, $worker); } unset($filter['apply_to']); } foreach ($filter as $key => $value) { $container->setParameter('assetic.filter.' . $name . '.' . $key, $value); } } // twig functions $container->setParameter('assetic.twig_extension.functions', $config['twig']['functions']); // choose dynamic or static if ($container->getParameterBag()->resolveValue($container->getParameterBag()->get('assetic.use_controller'))) { $loader->load('controller.xml'); $container->getDefinition('assetic.helper.dynamic')->addTag('templating.helper', array('alias' => 'assetic')); $container->removeDefinition('assetic.helper.static'); } else { $loader->load('asset_writer.xml'); $container->getDefinition('assetic.helper.static')->addTag('templating.helper', array('alias' => 'assetic')); $container->removeDefinition('assetic.helper.dynamic'); } // bundle and kernel resources foreach ($container->getParameterBag()->resolveValue($config['bundles']) as $bundle) { $rc = new \ReflectionClass($bundles[$bundle]); foreach (array('twig', 'php') as $engine) { $container->setDefinition('assetic.' . $engine . '_directory_resource.' . $bundle, new DirectoryResourceDefinition($bundle, $engine, array($container->getParameter('kernel.root_dir') . '/Resources/' . $bundle . '/views', dirname($rc->getFileName()) . '/Resources/views'))); } } foreach (array('twig', 'php') as $engine) { $container->setDefinition('assetic.' . $engine . '_directory_resource.kernel', new DirectoryResourceDefinition('', $engine, array($container->getParameter('kernel.root_dir') . '/Resources/views'))); } }
/** * Loads the configuration. * * @param array $configs An array of configuration settings * @param ContainerBuilder $container A ContainerBuilder instance */ public function load(array $configs, ContainerBuilder $container) { $parameterBag = $container->getParameterBag(); $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); $loader->load('assetic.xml'); $loader->load('templating_twig.xml'); $loader->load('templating_php.xml'); $config = self::processConfigs($configs, $container->getParameter('kernel.debug'), array_keys($container->getParameter('kernel.bundles'))); $container->setParameter('assetic.debug', $config['debug']); $container->setParameter('assetic.use_controller', $config['use_controller']); $container->setParameter('assetic.read_from', $config['read_from']); $container->setParameter('assetic.write_to', $config['write_to']); $container->setParameter('assetic.java.bin', $config['java']); $container->setParameter('assetic.node.bin', $config['node']); $container->setParameter('assetic.sass.bin', $config['sass']); // register formulae $formulae = array(); foreach ($config['assets'] as $name => $formula) { $formulae[$name] = array($formula['inputs'], $formula['filters'], $formula['options']); } if ($formulae) { $container->getDefinition('assetic.config_resource')->replaceArgument(0, $formulae); } else { $container->removeDefinition('assetic.config_loader'); $container->removeDefinition('assetic.config_resource'); } // register filters foreach ($config['filters'] as $name => $filter) { if (isset($filter['resource'])) { $loader->load($parameterBag->resolveValue($filter['resource'])); unset($filter['resource']); } else { $loader->load('filters/' . $name . '.xml'); } if (isset($filter['file'])) { $container->getDefinition('assetic.filter.' . $name)->setFile($filter['file']); unset($filter['file']); } if (isset($filter['apply_to'])) { if (!is_array($filter['apply_to'])) { $filter['apply_to'] = array($filter['apply_to']); } foreach ($filter['apply_to'] as $i => $pattern) { $worker = new DefinitionDecorator('assetic.worker.ensure_filter'); $worker->replaceArgument(0, '/' . $pattern . '/'); $worker->replaceArgument(1, new Reference('assetic.filter.' . $name)); $worker->addTag('assetic.factory_worker'); $container->setDefinition('assetic.filter.' . $name . '.worker' . $i, $worker); } unset($filter['apply_to']); } foreach ($filter as $key => $value) { $container->setParameter('assetic.filter.' . $name . '.' . $key, $value); } } // twig functions $container->setParameter('assetic.twig_extension.functions', $config['twig']['functions']); // choose dynamic or static if ($parameterBag->resolveValue($parameterBag->get('assetic.use_controller'))) { $loader->load('controller.xml'); $container->getDefinition('assetic.helper.dynamic')->addTag('templating.helper', array('alias' => 'assetic')); $container->removeDefinition('assetic.helper.static'); } else { $loader->load('asset_writer.xml'); $container->getDefinition('assetic.helper.static')->addTag('templating.helper', array('alias' => 'assetic')); $container->removeDefinition('assetic.helper.dynamic'); } // register config resources self::registerFormulaResources($container, $parameterBag->resolveValue($config['bundles'])); }
/** * {@inheritDoc} */ public function load(array $configs, ContainerBuilder $container) { $configuration = new Configuration(); $config = $this->processConfiguration($configuration, $configs); $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); $loader->load('services.yml'); $loader->load('factories.yml'); $loader->load('builders.yml'); $profileRegistry = $container->getDefinition('giftcards.encryption.profile.registry'); foreach ($config['profiles'] as $profile => $profileConfig) { $profileRegistry->addMethodCall('set', array($profile, new Definition('Giftcards\\Encryption\\Profile\\Profile', array($profileConfig['cipher'], $profileConfig['key_name'])))); } $container->getDefinition('giftcards.encryption.encryptor')->replaceArgument(4, $config['default_profile']); if (count($config['keys']['fallbacks'])) { $container->register('giftcards.encryption.key_source.fallback', 'Giftcards\\Encryption\\Key\\FallbackSource')->setArguments(array($config['keys']['fallbacks'], new Reference('giftcards.encryption.key_source'))); $container->register('giftcards.encryption.key_source.fallback.circular_guard', 'Giftcards\\Encryption\\Key\\CircularGuardSource')->setArguments(array(new Reference('giftcards.encryption.key_source.fallback'))); $container->getDefinition('giftcards.encryption.key_source.chain')->addMethodCall('addServiceId', array('giftcards.encryption.key_source.fallback.circular_guard')); } if (count($config['keys']['map'])) { $container->register('giftcards.encryption.key_source.mapping', 'Giftcards\\Encryption\\Key\\MappingSource')->setArguments(array($config['keys']['map'], new Reference('giftcards.encryption.key_source'))); $container->register('giftcards.encryption.key_source.mapping.circular_guard', 'Giftcards\\Encryption\\Key\\CircularGuardSource')->setArguments(array(new Reference('giftcards.encryption.key_source.mapping'))); $container->getDefinition('giftcards.encryption.key_source.chain')->addMethodCall('addServiceId', array('giftcards.encryption.key_source.mapping.circular_guard')); } if (count($config['keys']['combine'])) { $container->register('giftcards.encryption.key_source.combining', 'Giftcards\\Encryption\\Key\\CombiningSource')->setArguments(array($config['keys']['combine'], new Reference('giftcards.encryption.key_source'))); $container->register('giftcards.encryption.key_source.combining.circular_guard', 'Giftcards\\Encryption\\Key\\CircularGuardSource')->setArguments(array(new Reference('giftcards.encryption.key_source.combining'))); $container->getDefinition('giftcards.encryption.key_source.chain')->addMethodCall('addServiceId', array('giftcards.encryption.key_source.combining.circular_guard')); } if ($config['keys']['cache']) { $container->register('giftcards.encryption.key_source.caching', 'Giftcards\\Encryption\\Key\\CachingSource')->setArguments(array(new Definition('Doctrine\\Common\\Cache\\ArrayCache'), new Reference((string) $container->getAlias('giftcards.encryption.key_source')))); $container->setAlias('giftcards.encryption.key_source', 'giftcards.encryption.key_source.caching'); } foreach ($config['keys']['sources'] as $name => $sourceConfig) { $serviceId = sprintf('giftcards.encryption.key_source.%s', $name); $container->setDefinition($serviceId, new DefinitionDecorator('giftcards.encryption.abstract_key_source'))->replaceArgument(0, $sourceConfig['type'])->replaceArgument(1, $sourceConfig['options'])->addTag('giftcards.encryption.key_source', array('prefix' => $sourceConfig['prefix'], 'add_circular_guard' => $sourceConfig['add_circular_guard'])); } foreach ($config['cipher_texts']['rotators'] as $name => $rotatorConfig) { $serviceId = sprintf('giftcards.encryption.cipher_text_rotator.%s', $name); $container->setDefinition($serviceId, new DefinitionDecorator('giftcards.encryption.abstract_cipher_text_rotator'))->replaceArgument(0, $rotatorConfig['type'])->replaceArgument(1, $rotatorConfig['options'])->addTag('giftcards.encryption.cipher_text_rotator', array('alias' => $name)); } foreach ($config['cipher_texts']['serializers'] as $name => $serializerConfig) { $serviceId = sprintf('giftcards.encryption.cipher_text_serializer.%s', $name); $container->setDefinition($serviceId, new DefinitionDecorator('giftcards.encryption.abstract_cipher_text_serializer'))->replaceArgument(0, $serializerConfig['type'])->replaceArgument(1, $serializerConfig['options'])->addTag('giftcards.encryption.cipher_text_serializer', array('priority' => $serializerConfig['priority'])); } foreach ($config['cipher_texts']['deserializers'] as $name => $deserializerConfig) { $serviceId = sprintf('giftcards.encryption.cipher_text_deserializer.%s', $name); $container->setDefinition($serviceId, new DefinitionDecorator('giftcards.encryption.abstract_cipher_text_deserializer'))->replaceArgument(0, $deserializerConfig['type'])->replaceArgument(1, $deserializerConfig['options'])->addTag('giftcards.encryption.cipher_text_deserializer', array('priority' => $deserializerConfig['priority'])); } if ($config['doctrine']['encrypted_properties']['enabled']) { $loader->load('doctrine_encrypted_properties.yml'); foreach ($config['doctrine']['encrypted_properties']['orm']['connections'] as $connection) { $listener = new DefinitionDecorator('giftcards.encryption.listener.abstract_encrypted_listener'); $listener->addTag('doctrine.event_subscriber', array('connection' => $connection)); $container->setDefinition(sprintf('giftcards.encryption.listener.encrypted_listener.orm.%s', $connection), $listener); } foreach ($config['doctrine']['encrypted_properties']['odm']['connections'] as $connection) { $listener = new DefinitionDecorator('giftcards.encryption.listener.abstract_encrypted_listener'); $listener->addTag('doctrine_mongodb.odm.event_subscriber', array('connection' => $connection)); $container->setDefinition(sprintf('giftcards.encryption.listener.encrypted_listener.odm.%s', $connection), $listener); } } }