/** * {@inheritDoc} */ public function load(array $configs, ContainerBuilder $container) { $configuration = new Configuration(); $config = $this->processConfiguration($configuration, $configs); $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config/services')); if ('custom' !== $config['db_driver']) { $loader->load(sprintf('%s.xml', $config['db_driver'])); } $this->remapParametersNamespaces($config, $container, array('' => array('db_driver' => 'abc.file_distribution.storage', 'model_manager_name' => 'abc.file_distribution.model_manager_name'))); if (!empty($config['definition'])) { $this->loadFilesystem($config['definition'], $container, $loader, $config['db_driver']); } $loader->load('service.xml'); if (isset($config['filesystems'])) { foreach ($config['filesystems'] as $name => $filesystem) { $definitionId = 'abc.file_distribution.definition.' . $name; $definition = new DefinitionDecorator('abc.file_distribution.definition.prototype'); $definition->addMethodCall('setType', array($filesystem['type'])); $definition->addMethodCall('setPath', array($filesystem['path'])); $definition->addMethodCall('setProperties', array($filesystem['options'])); $container->setDefinition($definitionId, $definition); $definition = new Definition('Abc\\Filesystem\\Filesystem', array(new Reference('abc.file_distribution.adapter_factory'), new Reference($definitionId))); $container->setDefinition('abc.file_distribution.filesystem.' . $name, $definition); } } }
/** * {@inheritdoc} */ public function load(array $configs, ContainerBuilder $container) { $config = $this->processConfiguration(new Configuration(), $configs); $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); $loader->load('services.xml'); $container->setAlias('kassko_class_resolver', new Alias('kassko_class_resolver.chain', true)); $containerAdapterDef = $container->getDefinition('kassko_class_resolver.container'); $containerAdapterDef->setClass($config['container_adapter_class']); $container->addAliases($config['resolvers_aliases']); if (isset($config['resolvers'])) { foreach ($config['resolvers']['chain'] as $resolverConfig) { $resolverDef = new DefinitionDecorator('kassko_class_resolver.chain'); foreach ($resolverConfig['nested_resolvers'] as $nestedResolverService) { $resolverDef->addMethodCall('add', [new Reference($nestedResolverService)]); } if (null !== $resolverConfig['service']) { $resolverDef->addMethodCall('setDefault', [new Reference($resolverConfig['service'])]); } else { $defaultResolverDef = new Definition($container->getParameter('kassko_class_resolver.default.class'), ['action' => $resolverConfig['on_not_found_class']['action']]); $resolverDef->addMethodCall('setDefault', [$defaultResolverDef]); } $this->addAliasesByService($container, $config['resolver_aliases'], $resolverConfig['resolver_service']); } foreach ($config['resolvers']['container'] as $resolverConfig) { $container->setDefinition($resolverConfig['resolver_service'], new DefinitionDecorator('kassko_class_resolver.container_aware')); $this->addAliasesByService($container, $resolverConfig['resolver_aliases'], $resolverConfig['resolver_service']); } foreach ($config['resolvers']['map'] as $resolverConfig) { foreach ($resolverConfig['items'] as $item) { if ('@' !== substr($item['service'], 0, 1)) { $item['service'] = new Reference($item['service']); } } $resolverDef = new Definition($container->getParameter('kassko_class_resolver.map.class'), [$resolverConfig['items']]); $container->setDefinition($resolverConfig['resolver_service'], $resolverDef); $this->addAliasesByService($container, $resolverConfig['resolver_aliases'], $resolverConfig['resolver_service']); } foreach ($config['resolvers']['factory_adapter'] as $index => $resolverConfig) { $resolverDef = new Definition($container->getParameter('kassko_class_resolver.factory_adapter.class'), [new Reference($resolverConfig['adapted_factory']), $resolverConfig['support_method'], $resolverConfig['resolve_method']]); $container->setDefinition($resolverConfig['resolver_service'], $resolverDef); $this->addAliasesByService($container, $resolverConfig['resolver_aliases'], $resolverConfig['resolver_service']); } foreach ($config['resolvers']['static_factory_adapter'] as $index => $resolverConfig) { $resolverDef = new Definition($container->getParameter('kassko_class_resolver.static_factory_adapter.class'), [$resolverConfig['adapted_factory'], $resolverConfig['support_method'], $resolverConfig['resolve_method']]); $container->setDefinition($resolverConfig['resolver_service'], $resolverDef); $this->addAliasesByService($container, $resolverConfig['resolver_aliases'], $resolverConfig['resolver_service']); } } }
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; }
/** * Sets up handlers and registers middleware for each tagged client. * * @param ContainerBuilder $container * @param array $middlewareBag */ private function registerMiddleware(ContainerBuilder $container, array $middlewareBag) { $clients = $container->findTaggedServiceIds(self::CLIENT_TAG); foreach ($clients as $clientId => $tags) { if (count($tags) > 1) { throw new \LogicException('Clients should use a single \'csa_guzzle.client\' tag'); } $clientMiddleware = $middlewareBag; if (isset($tags[0]['middleware'])) { $whitelist = explode(' ', $tags[0]['middleware']); $clientMiddleware = array_filter($clientMiddleware, function ($value) use($whitelist) { return in_array($value['alias'], $whitelist, true); }); } $handlerStack = new DefinitionDecorator('csa_guzzle.handler_stack'); $handlerStack->setPublic(false); foreach ($clientMiddleware as $middleware) { $handlerStack->addMethodCall('push', [new Reference($middleware['id']), $middleware['alias']]); } $clientHandlerStackId = sprintf('csa_guzzle.handler_stack.%s', $clientId); $container->setDefinition($clientHandlerStackId, $handlerStack); $clientDefinition = $container->findDefinition($clientId); $arguments = $clientDefinition->getArguments(); $options = []; if (!empty($arguments)) { $options = array_shift($arguments); } $options['handler'] = new Reference($clientHandlerStackId); array_unshift($arguments, $options); $clientDefinition->setArguments($arguments); } }
/** * {@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); } } }
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\XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); $loader->load('error-handler-services.xml'); $container->setParameter('error_handler.stage', $config['stage']); $container->setParameter('error_handler.root_dir', $config['root_dir']); $shutdownSeverity = strtoupper($config['shutdown_severity']); $container->setParameter('error_handler.shutdown_severity', $shutdownSeverity); $baseErrorHandler = $container->getDefinition('base_error_handler'); $baseErrorHandler->replaceArgument(0, Severity::$SEVERITIES[$shutdownSeverity]); $errorHandler = $container->getDefinition('error_handler'); foreach ($config['categories'] as $categoryName => $categoryConfiguration) { if (empty($categoryConfiguration['handlers'])) { continue; } foreach ($categoryConfiguration['handlers'] as $handlerName => $handlerConfiguration) { $handlerClass = $container->getParameter(sprintf('error_handler.handler_%s.class', $handlerName)); $handlerId = sprintf('error_handler.handler.%s.%s', $categoryName, $handlerName); $handlerDefinition = new DefinitionDecorator('error_handler.abstract.handler'); $handlerDefinition->setClass($handlerClass); $handlerDefinition->setPublic(false); $handlerDefinition->setLazy(true); switch ($handlerName) { case 'bugsnag': $handlerDefinition->addArgument($handlerConfiguration['apiKey']); if (isset($handlerConfiguration['endpoint'])) { $handlerDefinition->addMethodCall('setEndpoint', array($handlerConfiguration['endpoint'])); } if (isset($handlerConfiguration['useSSL'])) { $handlerDefinition->addMethodCall('setUseSSL', array($handlerConfiguration['useSSL'])); } break; case 'raven': $handlerDefinition->addArgument($handlerConfiguration['endpoint']); break; } $container->setDefinition($handlerId, $handlerDefinition); $errorHandler->addMethodCall('addHandler', array(new Reference($handlerId), array($categoryName))); } } }
/** * {@inheritDoc} */ protected function addApis(Definition $paymentDefinition, ContainerBuilder $container, $contextName, array $config) { $apiDefinition = new DefinitionDecorator('payum.authorize_net_aim.api.prototype'); $apiDefinition->replaceArgument(0, $config['login_id']); $apiDefinition->replaceArgument(1, $config['transaction_key']); $apiDefinition->addMethodCall('setSandbox', array($config['sandbox'])); $apiId = 'payum.context.' . $contextName . '.api'; $container->setDefinition($apiId, $apiDefinition); $paymentDefinition->addMethodCall('addApi', array(new Reference($apiId))); }
private function loadAmqpTransport(array $config, ContainerBuilder $container) { $this->loader->load('transport/amqp/amqp.xml'); $this->loader->load(sprintf('transport/amqp/%s.xml', $config['driver'])); if (class_exists('JMS\\AopBundle\\JMSAopBundle')) { $this->loader->load('transport/amqp/tracer.xml'); } $camelizeKey = function (array $config) { $camelized = []; foreach ($config as $key => $value) { $camelized[lcfirst(ContainerBuilder::camelize($key))] = $value; } return $camelized; }; $definitions = []; foreach ($config['connections'] as $name => $connectionConfig) { $exchanges = $connectionConfig['exchanges']; unset($connectionConfig['exchanges']); $queues = $connectionConfig['queues']; unset($connectionConfig['queues']); $amqp = new DefinitionDecorator('event_band.transport.amqp.definition'); $amqp->addMethodCall('connection', [$camelizeKey($connectionConfig)]); foreach ($exchanges as $exchange => $exchangeConfig) { $exchangeType = $exchangeConfig['type']; unset($exchangeConfig['type']); $amqp->addMethodCall($exchangeType . 'Exchange', [$exchange, $camelizeKey($exchangeConfig)]); } foreach ($queues as $queue => $queueConfig) { $amqp->addMethodCall('queue', [$queue, $camelizeKey($queueConfig)]); } $definitionId = self::getTransportDefinitionId('amqp', $name); $container->setDefinition($definitionId, $amqp); $definitions[$name] = $definitionId; $connection = new DefinitionDecorator('event_band.transport.amqp.connection_definition'); $connection->setFactoryService($definitionId); $connectionId = self::getAmqpConnectionDefinitionId($name); $container->setDefinition($connectionId, $connection); $factory = new DefinitionDecorator(sprintf('event_band.transport.amqp.connection_factory.%s', $config['driver'])); $factory->addMethodCall('setDefinition', [new Reference($connectionId)]); $container->setDefinition(self::getAmqpLibConnectionFactoryId($name), $factory); $driver = new DefinitionDecorator('event_band.transport.amqp.driver.' . $config['driver']); $driver->replaceArgument(0, new Reference($this->getAmqpLibConnectionFactoryId($name))); $container->setDefinition($this->getAmqpDriverId($name), $driver); $configurator = new DefinitionDecorator('event_band.transport.amqp.configurator'); $configurator->replaceArgument(0, new Reference($this->getAmqpDriverId($name))); $container->setDefinition(self::getTypedTransportConfiguratorId('amqp', $name), $configurator); $container->getDefinition(self::getTransportConfiguratorId())->addMethodCall('registerConfigurator', ['amqp.' . $name, new Reference(self::getTypedTransportConfiguratorId('amqp', $name))]); } $container->setParameter('event_band.transport_definitions', array_merge($container->getParameter('event_band.transport_definitions'), ['amqp' => $definitions])); foreach ($config['converters'] as $name => $converterConfig) { $definition = new DefinitionDecorator('event_band.transport.amqp.converter.serialize'); $definition->replaceArgument(0, new Reference(self::getSerializerId($converterConfig['parameters']['serializer']))); $container->setDefinition(self::getAmqpConverterId($name), $definition); } }
/** * @throws \LogicException */ public function generate() { $definition = new DefinitionDecorator('phpmentors_pageflower.reflection_conversational_controller'); $definition->setArguments(array($this->controllerClass->getName())); foreach ($this->controllerClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { /* @var $method \ReflectionMethod */ if ($method->getDeclaringClass()->getName() == $this->controllerClass->getName()) { foreach ($this->reader->getMethodAnnotations($method) as $annotation) { if ($annotation instanceof Init) { $definition->addMethodCall('addInitMethod', array($method->getName())); } elseif ($annotation instanceof Accept) { if ($annotation->value === null || is_string($annotation->value) && strlen($annotation->value) == 0) { throw new \LogicException(sprintf('The value for annotation "%s" cannot be empty.', get_class($annotation))); } foreach ((array) $annotation->value as $accept) { if ($accept === null || strlen($accept) == 0) { throw new \LogicException(sprintf('The value for annotation "%s" cannot be empty.', get_class($annotation))); } if (!in_array($accept, $this->states)) { throw new \LogicException(sprintf('The value for annotation "%s" must be a one of [ %s ], "%s" is specified.', 'PHPMentors\\PageflowerBundle\\Annotation\\Accept', implode(', ', $this->states), $accept)); } $definition->addMethodCall('addAcceptableState', array($method->getName(), $accept)); } } } } } foreach ($this->controllerClass->getProperties() as $property) { /* @var $property \ReflectionProperty */ if ($property->getDeclaringClass()->getName() == $this->controllerClass->getName() && !$property->isStatic()) { foreach ($this->reader->getPropertyAnnotations($property) as $annotation) { $definition->addMethodCall('addStatefulProperty', array($property->getName())); } } } $reflectionConversationalControllerServiceId = 'phpmentors_pageflower.reflection_conversational_controller.' . $this->controllerServiceId; $this->container->setDefinition($reflectionConversationalControllerServiceId, $definition); $this->container->getDefinition('phpmentors_pageflower.reflection_conversational_controller_repository')->addMethodCall('add', array(new Reference($reflectionConversationalControllerServiceId))); }
protected function buildPrivateKeyProvider(array $config, ContainerBuilder $container) { if (@$config['private_key']['id']) { $id = $config['private_key']['id']; } else { if (@$config['private_key']['file']) { $fileProvider = new DefinitionDecorator('appsco_market_api.private_key_provider.file.abstract'); $fileProvider->addMethodCall('setFilename', array($config['private_key']['file'])); $id = 'appsco_market_api.private_key_provider.file'; $container->setDefinition($id, $fileProvider); } else { $id = 'appsco_market_api.private_key_provider.null'; } } $clientService = $container->getDefinition('appsco_market_api.client'); $clientService->replaceArgument(1, new Reference($id)); }
protected function loadIndexListener(array $indexConfig, ContainerBuilder $container, $objectPersisterId, $typeDef, $indexId) { if (isset($indexConfig['listener']['service'])) { return $indexConfig['listener']['service']; } $abstractListenerId = sprintf('acts.sphinx_realtime.listener.abstract.%s', $indexConfig['driver']); $listenerId = sprintf('acts.sphinx_realtime.listener.%s', $indexId); $listenerDef = new DefinitionDecorator($abstractListenerId); $listenerDef->replaceArgument(0, new Reference($objectPersisterId)); $listenerDef->replaceArgument(1, $indexConfig['model']); $listenerDef->replaceArgument(3, $indexConfig['identifier']); $listenerDef->replaceArgument(2, $this->getDoctrineEvents($indexConfig)); switch ($indexConfig['driver']) { case 'orm': $listenerDef->addTag('doctrine.event_subscriber'); break; } if (isset($indexConfig['listener']['is_indexable_callback'])) { $callback = $indexConfig['listener']['is_indexable_callback']; if (is_array($callback)) { list($class) = $callback + array(null); if (is_string($class) && !class_exists($class)) { $callback[0] = new Reference($class); } } $listenerDef->addMethodCall('setIsIndexableCallback', array($callback)); } $container->setDefinition($listenerId, $listenerDef); return $listenerId; }
protected function createRelyingPartyComposite(ContainerBuilder $container, $id) { $service = new DefinitionDecorator('aerial_ship_saml_sp.relying_party.composite'); $service->addMethodCall('append', array(new Reference('aerial_ship_saml_sp.relying_party.discovery.' . $id))); $service->addMethodCall('append', array(new Reference('aerial_ship_saml_sp.relying_party.federation_metadata.' . $id))); $service->addMethodCall('append', array(new Reference('aerial_ship_saml_sp.relying_party.authenticate.' . $id))); $service->addMethodCall('append', array(new Reference('aerial_ship_saml_sp.relying_party.assertion_consumer.' . $id))); $service->addMethodCall('append', array(new Reference('aerial_ship_saml_sp.relying_party.logout.' . $id))); // sso session check must be the last one since it can handle every request $service->addMethodCall('append', array(new Reference('aerial_ship_saml_sp.relying_party.sso_session_check.' . $id))); $container->setDefinition('aerial_ship_saml_sp.relying_party.composite.' . $id, $service); }
private function loadView(array $config, XmlFileLoader $loader, ContainerBuilder $container) { if (!empty($config['view']['exception_wrapper_handler'])) { $container->setAlias('fos_rest.view.exception_wrapper_handler', $config['view']['exception_wrapper_handler']); } if (!empty($config['view']['jsonp_handler'])) { $handler = new DefinitionDecorator($config['service']['view_handler']); $handler->setPublic(true); $jsonpHandler = new Reference('fos_rest.view_handler.jsonp'); $handler->addMethodCall('registerHandler', array('jsonp', array($jsonpHandler, 'createResponse'))); $container->setDefinition('fos_rest.view_handler', $handler); $container->setParameter('fos_rest.view_handler.jsonp.callback_param', $config['view']['jsonp_handler']['callback_param']); if (empty($config['view']['mime_types']['jsonp'])) { $config['view']['mime_types']['jsonp'] = $config['view']['jsonp_handler']['mime_type']; } } if ($config['view']['mime_types']['enabled']) { $loader->load('mime_type_listener.xml'); if (!empty($config['mime_type_listener']['service'])) { $service = $container->getDefinition('fos_rest.mime_type_listener'); $service->clearTag('kernel.event_listener'); } $container->setParameter('fos_rest.mime_types', $config['view']['mime_types']); } else { $container->setParameter('fos_rest.mime_types', array()); } if ($config['view']['view_response_listener']['enabled']) { $loader->load('view_response_listener.xml'); if (!empty($config['view_response_listener']['service'])) { $service = $container->getDefinition('fos_rest.view_response_listener'); $service->clearTag('kernel.event_listener'); } $container->setParameter('fos_rest.view_response_listener.force_view', $config['view']['view_response_listener']['force']); } $formats = array(); foreach ($config['view']['formats'] as $format => $enabled) { if ($enabled) { $formats[$format] = false; } } foreach ($config['view']['templating_formats'] as $format => $enabled) { if ($enabled) { $formats[$format] = true; } } $container->setParameter('fos_rest.formats', $formats); foreach ($config['view']['force_redirects'] as $format => $code) { if (true === $code) { $config['view']['force_redirects'][$format] = Codes::HTTP_FOUND; } } $container->setParameter('fos_rest.force_redirects', $config['view']['force_redirects']); if (!is_numeric($config['view']['failed_validation'])) { $config['view']['failed_validation'] = constant('\\FOS\\RestBundle\\Util\\Codes::' . $config['view']['failed_validation']); } $container->setParameter('fos_rest.failed_validation', $config['view']['failed_validation']); if (!is_numeric($config['view']['empty_content'])) { $config['view']['empty_content'] = constant('\\FOS\\RestBundle\\Util\\Codes::' . $config['view']['empty_content']); } $container->setParameter('fos_rest.empty_content', $config['view']['empty_content']); $container->setParameter('fos_rest.serialize_null', $config['view']['serialize_null']); $container->setParameter('fos_rest.default_engine', $config['view']['default_engine']); }
/** * Loads a configured DBAL connection. * * @param string $name The name of the connection * @param array $connection A dbal connection configuration. * @param ContainerBuilder $container A ContainerBuilder instance */ protected function loadDbalConnection($name, array $connection, ContainerBuilder $container) { // configuration $configuration = $container->setDefinition(sprintf('doctrine.dbal.%s_connection.configuration', $name), new DefinitionDecorator('doctrine.dbal.connection.configuration')); $logger = null; if ($connection['logging']) { $logger = new Reference('doctrine.dbal.logger'); } unset($connection['logging']); if ($connection['profiling']) { $profilingLoggerId = 'doctrine.dbal.logger.profiling.' . $name; $container->setDefinition($profilingLoggerId, new DefinitionDecorator('doctrine.dbal.logger.profiling')); $logger = new Reference($profilingLoggerId); $container->getDefinition('data_collector.doctrine')->addMethodCall('addLogger', array($name, $logger)); if (null !== $logger) { $chainLogger = new DefinitionDecorator('doctrine.dbal.logger.chain'); $chainLogger->addMethodCall('addLogger', array($logger)); $loggerId = 'doctrine.dbal.logger.chain.' . $name; $container->setDefinition($loggerId, $chainLogger); $logger = new Reference($loggerId); } } unset($connection['profiling']); if ($logger) { $configuration->addMethodCall('setSQLLogger', array($logger)); } // event manager $def = $container->setDefinition(sprintf('doctrine.dbal.%s_connection.event_manager', $name), new DefinitionDecorator('doctrine.dbal.connection.event_manager')); // connection if (isset($connection['charset'])) { if (isset($connection['driver']) && stripos($connection['driver'], 'mysql') !== false || isset($connection['driver_class']) && stripos($connection['driver_class'], 'mysql') !== false) { $mysqlSessionInit = new Definition('%doctrine.dbal.events.mysql_session_init.class%'); $mysqlSessionInit->setArguments(array($connection['charset'])); $mysqlSessionInit->setPublic(false); $mysqlSessionInit->addTag('doctrine.event_subscriber', array('connection' => $name)); $container->setDefinition(sprintf('doctrine.dbal.%s_connection.events.mysqlsessioninit', $name), $mysqlSessionInit); unset($connection['charset']); } } $options = $this->getConnectionOptions($connection); $container->setDefinition(sprintf('doctrine.dbal.%s_connection', $name), new DefinitionDecorator('doctrine.dbal.connection'))->setArguments(array($options, new Reference(sprintf('doctrine.dbal.%s_connection.configuration', $name)), new Reference(sprintf('doctrine.dbal.%s_connection.event_manager', $name)), $connection['mapping_types'])); }
private function loadView(array $config, XmlFileLoader $loader, ContainerBuilder $container) { if (!empty($config['view']['exception_wrapper_handler'])) { $container->setAlias('fos_rest.view.exception_wrapper_handler', $config['view']['exception_wrapper_handler']); } if (!empty($config['view']['jsonp_handler'])) { $handler = new DefinitionDecorator($config['service']['view_handler']); $handler->setPublic(true); $jsonpHandler = new Reference('fos_rest.view_handler.jsonp'); $handler->addMethodCall('registerHandler', ['jsonp', [$jsonpHandler, 'createResponse']]); $container->setDefinition('fos_rest.view_handler', $handler); $container->getDefinition('fos_rest.view_handler.jsonp')->replaceArgument(0, $config['view']['jsonp_handler']['callback_param']); if (empty($config['view']['mime_types']['jsonp'])) { $config['view']['mime_types']['jsonp'] = $config['view']['jsonp_handler']['mime_type']; } } if ($config['view']['mime_types']['enabled']) { $loader->load('mime_type_listener.xml'); if (!empty($config['mime_type_listener']['service'])) { $service = $container->getDefinition('fos_rest.mime_type_listener'); $service->clearTag('kernel.event_listener'); } $container->getDefinition('fos_rest.mime_type_listener')->replaceArgument(0, $config['view']['mime_types']); } if ($config['view']['view_response_listener']['enabled']) { $loader->load('view_response_listener.xml'); $service = $container->getDefinition('fos_rest.view_response_listener'); if (!empty($config['view_response_listener']['service'])) { $service->clearTag('kernel.event_listener'); } $service->replaceArgument(1, $config['view']['view_response_listener']['force']); } $formats = []; foreach ($config['view']['formats'] as $format => $enabled) { if ($enabled) { $formats[$format] = false; } } foreach ($config['view']['templating_formats'] as $format => $enabled) { if ($enabled) { $formats[$format] = true; } } $container->getDefinition('fos_rest.routing.loader.yaml_collection')->replaceArgument(3, $formats); $container->getDefinition('fos_rest.routing.loader.xml_collection')->replaceArgument(3, $formats); $container->getDefinition('fos_rest.routing.loader.reader.action')->replaceArgument(4, $formats); foreach ($config['view']['force_redirects'] as $format => $code) { if (true === $code) { $config['view']['force_redirects'][$format] = Response::HTTP_FOUND; } } if (!is_numeric($config['view']['failed_validation'])) { $config['view']['failed_validation'] = constant('\\Symfony\\Component\\HttpFoundation\\Response::' . $config['view']['failed_validation']); } $defaultViewHandler = $container->getDefinition('fos_rest.view_handler.default'); $defaultViewHandler->replaceArgument(5, $formats); $defaultViewHandler->replaceArgument(6, $config['view']['failed_validation']); if (!is_numeric($config['view']['empty_content'])) { $config['view']['empty_content'] = constant('\\Symfony\\Component\\HttpFoundation\\Response::' . $config['view']['empty_content']); } $defaultViewHandler->replaceArgument(7, $config['view']['empty_content']); $defaultViewHandler->replaceArgument(8, $config['view']['serialize_null']); $defaultViewHandler->replaceArgument(9, $config['view']['force_redirects']); $defaultViewHandler->replaceArgument(10, $config['view']['default_engine']); }
private function configureResultCache(array $config, ContainerBuilder $container, Definition $configurationDef) { $cacheClass = null; $cacheId = null; if (isset($config['class'])) { $cacheClass = $config['class']; } elseif (isset($config['id'])) { $cacheId = $config['id']; } else { $cacheClass = "Doctrine\\Common\\Cache\\ArrayCache"; } if (null !== $cacheClass) { $cacheId = 'kassko_data_mapper.result_cache'; $cacheDef = new DefinitionDecorator('kassko_data_mapper.result_cache.prototype'); $cacheDef->setClass($cacheClass)->setPublic(false); $container->setDefinition($cacheId, $cacheDef); } $cacheAdapterId = $cacheId . '_adapter'; $cacheAdapterDef = new Definition($config['adapter_class'], [new Reference($cacheId)]); $container->setDefinition($cacheAdapterId, $cacheAdapterDef); $cacheConfigId = 'kassko_data_mapper.result_cache_configuration'; $cacheConfigDef = new DefinitionDecorator('kassko_data_mapper.configuration.cache.prototype'); $cacheConfigDef->addMethodCall('setCache', [new Reference($cacheAdapterId)]); $cacheConfigDef->addMethodCall('setLifeTime', [$config['life_time']]); $cacheConfigDef->addMethodCall('setShared', [$config['is_shared']]); $container->setDefinition($cacheConfigId, $cacheConfigDef); $configurationDef->addMethodCall('setResultCacheConfig', [new Reference($cacheConfigId)]); }
/** * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container * @param string $providerKey * @param array config * @param string $facebookAdapterId * @return string */ public function createListener(ContainerBuilder $container, $providerKey, array $config, $facebookAdapterId) { $listenerId = FacebookAuthenticationExtension::CONTAINER_SERVICE_ID_SECURITY_FIREWALL_LISTENER; $listener = new DefinitionDecorator($listenerId); $listener->setArguments([new Reference('security.context'), new Reference('security.authentication.manager'), new Reference('security.authentication.session_strategy'), new Reference('security.http_utils'), $providerKey, new Reference($config[self::CONFIG_NODE_NAME_AUTHENTICATION_SUCCESS_HANDLER]), new Reference($config[self::CONFIG_NODE_NAME_AUTHENTICATION_FAILURE_HANDLER]), $config, $container->has('logger') ? new Reference('logger') : null, new Reference('event_dispatcher')]); $listener->addMethodCall('setFacebookAdapter', [new Reference($facebookAdapterId)]); $listenerId = $this->namespaceServiceId($listenerId, $providerKey); $container->setDefinition($listenerId, $listener); return $listenerId; }
protected function loadTypeListener(array $typeConfig, ContainerBuilder $container, $objectPersisterId, $typeDef, $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, $typeConfig['model']); $listenerDef->replaceArgument(3, $typeConfig['identifier']); $listenerDef->replaceArgument(2, $this->getDoctrineEvents($typeConfig)); switch ($typeConfig['driver']) { case 'orm': $listenerDef->addTag('doctrine.event_subscriber'); break; case 'mongodb': $listenerDef->addTag('doctrine_mongodb.odm.event_subscriber'); break; } if (isset($typeConfig['listener']['is_indexable_callback'])) { $callback = $typeConfig['listener']['is_indexable_callback']; if (is_array($callback)) { list($class) = $callback + array(null); if (is_string($class) && !class_exists($class)) { $callback[0] = new Reference($class); } } $listenerDef->addMethodCall('setIsIndexableCallback', array($callback)); } $container->setDefinition($listenerId, $listenerDef); return $listenerId; }
/** * Loads the configured types. * * @param array $types * @param ContainerBuilder $container * @param array $indexConfig * @param array $indexableCallbacks */ private function loadTypes(array $types, ContainerBuilder $container, array $indexConfig, array &$indexableCallbacks) { foreach ($types as $name => $type) { $indexName = $indexConfig['name']; $typeId = sprintf('%s.%s', $indexConfig['reference'], $name); $typeDef = new DefinitionDecorator('fos_elastica.type_prototype'); $typeDef->setFactory(array($indexConfig['reference'], 'getType')); $typeDef->replaceArgument(0, $name); $container->setDefinition($typeId, $typeDef); $typeConfig = array('name' => $name, 'mapping' => array(), 'config' => array()); foreach (array('dynamic_templates', 'properties', '_all', '_boost', '_id', '_parent', '_routing', '_source', '_timestamp', '_ttl') as $field) { if (isset($type[$field])) { $typeConfig['mapping'][$field] = $type[$field]; } } foreach (array('persistence', 'serializer', 'analyzer', 'search_analyzer', 'dynamic', 'date_detection', 'dynamic_date_formats', 'numeric_detection') as $field) { $typeConfig['config'][$field] = array_key_exists($field, $type) ? $type[$field] : null; } $this->indexConfigs[$indexName]['types'][$name] = $typeConfig; if (isset($type['persistence'])) { $this->loadTypePersistenceIntegration($type['persistence'], $container, new Reference($typeId), $indexName, $name); $typeConfig['persistence'] = $type['persistence']; } if (isset($type['_parent'])) { // _parent mapping cannot contain `property` and `identifier`, so removing them after building `persistence` unset($indexConfig['types'][$name]['mapping']['_parent']['property'], $indexConfig['types'][$name]['mapping']['_parent']['identifier']); } if (isset($type['indexable_callback'])) { $indexableCallbacks[sprintf('%s/%s', $indexName, $name)] = $type['indexable_callback']; } if ($container->hasDefinition('fos_elastica.serializer_callback_prototype')) { $typeSerializerId = sprintf('%s.serializer.callback', $typeId); $typeSerializerDef = new DefinitionDecorator('fos_elastica.serializer_callback_prototype'); if (isset($type['serializer']['groups'])) { $typeSerializerDef->addMethodCall('setGroups', array($type['serializer']['groups'])); } if (isset($type['serializer']['serialize_null'])) { $typeSerializerDef->addMethodCall('setSerializeNull', array($type['serializer']['serialize_null'])); } if (isset($type['serializer']['version'])) { $typeSerializerDef->addMethodCall('setVersion', array($type['serializer']['version'])); } $typeDef->addMethodCall('setSerializer', array(array(new Reference($typeSerializerId), 'serialize'))); $container->setDefinition($typeSerializerId, $typeSerializerDef); } } }
private function loadJackalopeSession(array $session, ContainerBuilder $container, $type, $admin = false) { $serviceNamePrefix = $admin ? '.admin' : ''; $backendParameters = array(); switch ($type) { case 'doctrinedbal': $connectionName = !empty($session['backend']['connection']) ? $session['backend']['connection'] : null; $connectionService = $connectionName ? sprintf('doctrine.dbal.%s_connection', $connectionName) : 'database_connection'; $connectionService = new Alias($connectionService, true); $connectionAliasName = sprintf('doctrine_phpcr%s.jackalope_doctrine_dbal.%s_connection', $serviceNamePrefix, $session['name']); $container->setAlias($connectionAliasName, $connectionService); $backendParameters['jackalope.doctrine_dbal_connection'] = new Reference($connectionAliasName); $container->getDefinition('doctrine_phpcr.jackalope_doctrine_dbal.schema_listener')->addTag('doctrine.event_listener', array('connection' => $connectionName, 'event' => 'postGenerateSchema', 'lazy' => true)); if (false === $admin && isset($session['backend']['caches'])) { foreach ($session['backend']['caches'] as $key => $cache) { $backendParameters['jackalope.data_caches'][$key] = new Reference($cache); } } break; case 'prismic': $backendParameters['jackalope.prismic_uri'] = $session['backend']['url']; break; case 'jackrabbit': $backendParameters['jackalope.jackrabbit_uri'] = $session['backend']['url']; break; } // pipe additional parameters unchanged to jackalope $backendParameters += $session['backend']['parameters']; // only set this default here when we know we are jackalope if (!isset($backendParameters['jackalope.check_login_on_server'])) { $backendParameters['jackalope.check_login_on_server'] = false; } if ('doctrinedbal' === $type && $backendParameters['jackalope.check_login_on_server']) { $this->disableProxyWarmer = true; } if (isset($session['backend']['factory'])) { /* * If it is a class, pass the name as is, else assume it is * a service id and get a reference to it */ if (class_exists($session['backend']['factory'])) { $backendParameters['jackalope.factory'] = $session['backend']['factory']; } else { $backendParameters['jackalope.factory'] = new Reference($session['backend']['factory']); } } $logger = null; if (!empty($session['backend']['logging'])) { $logger = new Reference('doctrine_phpcr.logger'); } if (!empty($session['backend']['profiling'])) { $profilingLoggerId = 'doctrine_phpcr.logger.profiling.' . $session['name']; $profilingLoggerDef = new DefinitionDecorator('doctrine_phpcr.logger.profiling'); if ($session['backend']['backtrace']) { $profilingLoggerDef->addMethodCall('enableBacktrace'); } $container->setDefinition($profilingLoggerId, $profilingLoggerDef); $profilerLogger = new Reference($profilingLoggerId); $container->getDefinition('doctrine_phpcr.data_collector')->addMethodCall('addLogger', array($session['name'], $profilerLogger)); $stopWatchLoggerId = 'doctrine_phpcr.logger.stop_watch.' . $session['name']; $container->setDefinition($stopWatchLoggerId, new DefinitionDecorator('doctrine_phpcr.logger.stop_watch')); $stopWatchLogger = new Reference($stopWatchLoggerId); $chainLogger = new DefinitionDecorator('doctrine_phpcr.logger.chain'); $chainLogger->addMethodCall('addLogger', array($profilerLogger)); $chainLogger->addMethodCall('addLogger', array($stopWatchLogger)); if (null !== $logger) { $chainLogger->addMethodCall('addLogger', array($logger)); } $loggerId = 'doctrine_phpcr.logger.chain.' . $session['name']; $container->setDefinition($loggerId, $chainLogger); $logger = new Reference($loggerId); } if ($logger) { $backendParameters['jackalope.logger'] = $logger; } $repositoryFactory = new DefinitionDecorator('doctrine_phpcr.jackalope.repository.factory.' . $type); $factory = $container->setDefinition(sprintf('doctrine_phpcr%s.jackalope.repository.%s', $serviceNamePrefix, $session['name']), $repositoryFactory); $factory->replaceArgument(0, $backendParameters); $username = $admin && $session['admin_username'] ? $session['admin_username'] : $session['username']; $password = $admin && $session['admin_password'] ? $session['admin_password'] : $session['password']; $credentials = new DefinitionDecorator('doctrine_phpcr.credentials'); $credentialsServiceId = sprintf('doctrine_phpcr%s.%s_credentials', $serviceNamePrefix, $session['name']); $container->setDefinition($credentialsServiceId, $credentials)->replaceArgument(0, $username)->replaceArgument(1, $password); // TODO: move the following code block back into the XML file when we drop support for symfony <2.6 $definition = new DefinitionDecorator('doctrine_phpcr.jackalope.session'); $factoryServiceId = sprintf('doctrine_phpcr%s.jackalope.repository.%s', $serviceNamePrefix, $session['name']); if (method_exists($definition, 'setFactory')) { $definition->setFactory(array(new Reference($factoryServiceId), 'login')); } else { $definition->setFactoryService($factoryServiceId); $definition->setFactoryMethod('login'); } $workspace = $admin ? null : $session['workspace']; $definition->replaceArgument(0, new Reference($credentialsServiceId))->replaceArgument(1, $workspace); $serviceName = sprintf('doctrine_phpcr%s.%s_session', $serviceNamePrefix, $session['name']); $container->setDefinition($serviceName, $definition); foreach ($session['options'] as $key => $value) { $definition->addMethodCall('setSessionOption', array($key, $value)); } $eventManagerServiceId = sprintf('doctrine_phpcr%s.%s_session.event_manager', $serviceNamePrefix, $session['name']); $container->setDefinition($eventManagerServiceId, new DefinitionDecorator('doctrine_phpcr.session.event_manager')); }
private function createListDefinition($model, $options, ContainerBuilder $container) { $states = array('column' => $options['default_sort']['column'], 'order' => $options['default_sort']['order'], 'page' => 1, 'criteria' => array()); $listState = new DefinitionDecorator('lyra_admin.user_state'); $listState->replaceArgument(1, $states)->replaceArgument(2, $model)->setPublic(false); $container->setDefinition(sprintf('lyra_admin.%s.user_state', $model), $listState); $queryBuilder = new DefinitionDecorator('lyra_admin.query_builder'); $queryBuilder->setArguments(array(new Reference(sprintf('lyra_admin.%s.model_manager', $model))))->setPublic(false); $container->setDefinition(sprintf('lyra_admin.%s.query_builder', $model), $queryBuilder); $pager = new DefinitionDecorator('lyra_admin.pager'); $pager->addMethodCall('setMaxRows', array($options['max_page_rows']))->setPublic(false); $container->setDefinition(sprintf('lyra_admin.%s.pager', $model), $pager); $manager = new DefinitionDecorator('lyra_admin.security_manager'); $manager->addMethodCall('setModelName', array($model))->setPublic(false); $container->setDefinition(sprintf('lyra_admin.%s.security_manager', $model), $manager); $columns = new DefinitionDecorator('lyra_admin.column_collection'); $columns->setPublic(false); $container->setDefinition(sprintf('lyra_admin.%s.grid_columns', $model), $columns); $types = array('list_actions', 'object_actions', 'batch_actions', 'other_actions'); foreach ($types as $type) { $this->createCollectionDefinition($model, $type, $options[$type], $container); } $container->setDefinition(sprintf('lyra_admin.%s.grid', $model), new DefinitionDecorator('lyra_admin.grid.abstract'))->replaceArgument(0, new Reference(sprintf('lyra_admin.%s.pager', $model)))->replaceArgument(1, new Reference(sprintf('lyra_admin.%s.query_builder', $model)))->replaceArgument(2, new Reference(sprintf('lyra_admin.%s.security_manager', $model)))->addMethodCall('setModelName', array($model))->addMethodCall('setState', array(new Reference(sprintf('lyra_admin.%s.user_state', $model))))->addMethodCall('setTitle', array($options['title']))->addMethodCall('setTemplate', array($options['template']))->addMethodCall('setTransDomain', array($options['trans_domain']))->addMethodCall('setDefaultSort', array($options['default_sort']))->addMethodCall('setColumns', array(new Reference(sprintf('lyra_admin.%s.grid_columns', $model))))->addMethodCall('setActions', array(new Reference(sprintf('lyra_admin.%s.other_actions.collection', $model))))->addMethodCall('setListActions', array(new Reference(sprintf('lyra_admin.%s.list_actions.collection', $model))))->addMethodCall('setObjectActions', array(new Reference(sprintf('lyra_admin.%s.object_actions.collection', $model))))->addMethodCall('setBatchActions', array(new Reference(sprintf('lyra_admin.%s.batch_actions.collection', $model)))); }
/** * Register handler instance * * @param string $handlerKey * @param array $handlerInfo * @param ContainerBuilder $container * * @return string The handler service id */ private function registerHandler($handlerKey, array $handlerInfo, ContainerBuilder $container) { $handlerId = 'api.handler.' . $handlerKey; $errorsId = $handlerId . '.error'; $chainActionLoaderId = $handlerId . '.action_loader.chain'; $actionLoaderId = $handlerId . '.action_loader'; $actionManagerId = $handlerId . '.action_manager'; $handlerDefinition = new DefinitionDecorator('api.handler_abstract'); $handlerDefinition->setPublic(true); // Create action loader and manager $chainActionLoaderDefinition = new DefinitionDecorator('api.action_loader_abstract'); $container->setDefinition($chainActionLoaderId, $chainActionLoaderDefinition); if ($handlerInfo['cache']) { $cachedActionLoaderDefinition = new DefinitionDecorator('api.action_loader_cached_abstract'); $cachedActionLoaderDefinition->replaceArgument(0, new Reference($chainActionLoaderId)); $cachedActionLoaderDefinition->replaceArgument(1, new Reference($handlerInfo['cache'])); $cachedActionLoaderDefinition->replaceArgument(2, $handlerId . ':actions'); $container->setDefinition($actionLoaderId, $cachedActionLoaderDefinition); } else { $actionLoaderId = $chainActionLoaderId; } $actionManagerDefinition = new DefinitionDecorator('api.action_manager_abstract'); $actionManagerDefinition->replaceArgument(0, new Reference($actionLoaderId)); $container->setDefinition($actionManagerId, $actionManagerDefinition); $callableActionLoaderId = $handlerId . '.action_loader.callable'; $callableActionLoaderDefinition = new DefinitionDecorator('api.action_loader_callable_abstract'); $container->setDefinition($callableActionLoaderId, $callableActionLoaderDefinition); $chainActionLoaderDefinition->addMethodCall('addLoader', [new Reference($callableActionLoaderId)]); // Add actions loaders to chain action loader if ($handlerInfo['enable_service_annotated_loader']) { $serviceAnnotatedActionLoaderId = $handlerId . '.action_loader.service_annotated'; $serviceAnnotatedActionLoaderDefinition = new DefinitionDecorator('api.action_loader_service_annotated_abstract'); $container->setDefinition($serviceAnnotatedActionLoaderId, $serviceAnnotatedActionLoaderDefinition); $chainActionLoaderDefinition->addMethodCall('addLoader', [new Reference($serviceAnnotatedActionLoaderId)]); } if ($handlerInfo['callable_loader_factory']) { if (strpos($handlerInfo['callable_loader_factory'], '::') !== false) { list($serviceId, $method) = explode('::', $handlerInfo['callable_loader_factory'], 2); } else { $serviceId = $handlerInfo['callable_loader_factory']; $method = 'configure'; } $callableActionLoaderDefinition->setConfigurator([new Reference($serviceId), $method]); } // Create error system $errorDefinition = new DefinitionDecorator('api.error_abstract'); $container->setDefinition($errorsId, $errorDefinition); // Create extractor $actionExtractorId = $handlerId . '.action_extractor'; $extractorId = $handlerId . '.extractor'; $actionExtractorDefinition = new DefinitionDecorator('api.handler.action_extractor_abstract'); if ($handlerInfo['parameter_extractor']) { $actionExtractorDefinition->replaceArgument(1, new Reference($handlerInfo['parameter_extractor'])); } else { $actionExtractorDefinition->replaceArgument(1, null); } if ($handlerInfo['response_extractor']) { $actionExtractorDefinition->replaceArgument(2, new Reference($handlerInfo['response_extractor'])); } else { $actionExtractorDefinition->replaceArgument(2, null); } $extractorDefinition = new DefinitionDecorator('api.handler.extractor_abstract'); $extractorDefinition->replaceArgument(0, new Reference($actionExtractorId)); $container->setDefinition($actionExtractorId, $actionExtractorDefinition); if ($handlerInfo['cache']) { // Use cache system for extractor (Replace services for use cached) $extractorId .= '_delegate'; $extractorDefinition->setPublic(false); $container->setDefinition($extractorId, $extractorDefinition); $cachedExtractorId = $handlerId . '.extractor'; $cachedExtractorDefinition = new DefinitionDecorator('api.handler.cached_extractor_abstract'); $cachedExtractorDefinition->replaceArgument(0, new Reference($extractorId)); $cachedExtractorDefinition->replaceArgument(1, new Reference($handlerInfo['cache'])); $cachedExtractorDefinition->replaceArgument(2, $handlerKey); $cachedExtractorDefinition->addTag('api.handler.extractor', ['handler' => $handlerKey]); $container->setDefinition($cachedExtractorId, $cachedExtractorDefinition); } else { $container->setDefinition($extractorId, $extractorDefinition); $extractorDefinition->addTag('api.handler.extractor', ['handler' => $handlerKey]); } // Create event dispatcher $eventDispatcherId = $handlerId . '.event_dispatcher'; $primaryEventDispatcherId = $handlerId . '.event_dispatcher_primary'; $eventDispatcherDefinition = new DefinitionDecorator('api.event_dispatcher_chain_abstract'); $primaryEventDispatcher = new Definition('Symfony\\Component\\EventDispatcher\\EventDispatcher'); $primaryEventDispatcher->setPublic(false); $eventDispatcherDefinition->addMethodCall('addEventDispatcher', [new Reference('event_dispatcher')]); $eventDispatcherDefinition->addMethodCall('addEventDispatcher', [new Reference($primaryEventDispatcherId), true]); $container->setDefinition($primaryEventDispatcherId, $primaryEventDispatcher); $container->setDefinition($eventDispatcherId, $eventDispatcherDefinition); // Inject handler to container $container->setDefinition($handlerId, $handlerDefinition); // Replace handler arguments $handlerDefinition->replaceArgument(0, new Reference($actionManagerId)); $handlerDefinition->replaceArgument(2, new Reference($handlerInfo['parameter_resolver'])); $handlerDefinition->replaceArgument(3, new Reference($eventDispatcherId)); $handlerDefinition->replaceArgument(4, new Reference($errorsId)); // Add common tags $handlerDefinition->addTag('monolog.logger', ['channel' => $this->getLoggerChannelForHandler($handlerKey)]); $handlerDefinition->addTag('api.handler', ['key' => $handlerKey, 'service_loader' => !empty($serviceAnnotatedActionLoaderId) ? $serviceAnnotatedActionLoaderId : null, 'event_dispatcher' => $eventDispatcherId, 'errors' => $errorsId]); $subscribers = $handlerInfo['subscribers']; // Register common systems for handlers if ($subscribers['response_transformable']) { $this->registerTransformableSubscriber($handlerKey, $container); } if ($subscribers['object_security_authorization']) { $this->registerObjectSecurityAuthorizationSubscriber($handlerKey, $container); } if ($subscribers['enabled_checker']) { $this->registerEnabledCheckerSubscriber($handlerKey, $container); } if ($subscribers['logger']) { $this->registerLoggerSubscriber($handlerKey, $container); } // Register common methods $methods = $handlerInfo['methods']; $methods = array_filter($methods, function ($value) { return $value; }); if (count($methods)) { $commonServiceActionLoaderId = 'api.handler.' . $handlerId . '.extra_method_service_loader'; $commonServiceActionLoaderDefinition = new DefinitionDecorator('api.action_loader.service_method'); $container->setDefinition($commonServiceActionLoaderId, $commonServiceActionLoaderDefinition); $chainActionLoaderDefinition->addMethodCall('addLoader', [new Reference($commonServiceActionLoaderId)]); if ($methods['error_list']) { $errorListServiceId = 'api.handler.' . $handlerId . '.extra_service_method.error_list'; $errorListMethodDefinition = new Definition('FivePercent\\Component\\Api\\Api\\ErrorList'); $errorListMethodDefinition->setArguments([new Reference('api.handler_registry'), $handlerKey]); $container->setDefinition($errorListServiceId, $errorListMethodDefinition); $commonServiceActionLoaderDefinition->addMethodCall('addServiceMethod', [is_string($methods['error_list']) ? $methods['error_list'] : 'error.list', $errorListServiceId, 'getErrors']); } } return $handlerId; }
/** * @param string $methodName * @param string $methodServiceId * @param ContainerBuilder $container * @param array $arrDecorators decorator_name => service_id * @return string composite service id */ protected function buildPrePostDecorators($methodName, $methodServiceId, ContainerBuilder $container, array $arrDecorators) { list($pre, $post) = $this->getServicePrePostDecorators($methodServiceId, $container, $arrDecorators); $compositeId = 'bwc_component_jwt_api.method.composite.' . str_replace('-', '_', $methodName); $composite = new DefinitionDecorator('bwc_component_jwt_api.handler.abstract.composite'); foreach ($pre as $decoratorServiceId) { $composite->addMethodCall('addContextHandler', array(new Reference($decoratorServiceId))); } $composite->addMethodCall('addContextHandler', array(new Reference($methodServiceId))); foreach ($post as $decoratorServiceId) { $composite->addMethodCall('addContextHandler', array(new Reference($decoratorServiceId))); } $container->setDefinition($compositeId, $composite); return $compositeId; }
/** * @throws \LogicException */ public function generate() { $pageflowAnnotation = $this->reader->getClassAnnotation($this->controllerClass, 'PHPMentors\\PageflowerBundle\\Annotation\\Pageflow'); if ($pageflowAnnotation === null) { throw new \LogicException(sprintf('Annotation "%s" is not found in class "%s".', 'PHPMentors\\PageflowerBundle\\Annotation\\Pageflow', $this->controllerClass->getName())); } $pageflowBuilderDefinition = new DefinitionDecorator('phpmentors_pageflower.pageflow_builder'); $pageflowBuilderDefinition->setArguments(array($this->controllerServiceId)); $statesFound = false; $transitionsFound = false; foreach ($pageflowAnnotation->value as $annotation) { if ($annotation instanceof States) { if ($statesFound) { throw new \LogicException(sprintf('Annotation "%s" must be specified only once.', get_class($annotation))); } $statesFound = true; foreach ($annotation->value as $state) { if ($state instanceof AnnotationInterface) { if ($state->value === null || strlen($state->value) == 0) { throw new \LogicException(sprintf('The value for annotation "%s" cannot be empty.', get_class($state))); } if ($state instanceof Start) { $pageflowBuilderDefinition->addMethodCall('addState', array($state->value)); $pageflowBuilderDefinition->addMethodCall('setStartState', array($state->value)); $this->states[] = $state->value; } elseif ($state instanceof End) { $pageflowBuilderDefinition->addMethodCall('addState', array($state->value)); $pageflowBuilderDefinition->addMethodCall('setEndState', array($state->value, StateInterface::STATE_FINAL)); $this->states[] = $state->value; } else { throw new \LogicException(sprintf('State "%s" must be encapsulated with one of [ %s ], "%s" is specified.', $state->value, implode(', ', array('PHPMentors\\PageflowerBundle\\Annotation\\Start', 'PHPMentors\\PageflowerBundle\\Annotation\\End')), get_class($state))); } } else { if ($state === null || strlen($state) == 0) { throw new \LogicException(sprintf('The value for annotation "%s" cannot be empty.', get_class($annotation))); } $pageflowBuilderDefinition->addMethodCall('addState', array($state)); $this->states[] = $state; } } } elseif ($annotation instanceof Transitions) { if ($transitionsFound) { throw new \LogicException(sprintf('Annotation "%s" must be specified only once.', get_class($annotation))); } $transitionsFound = true; foreach ($annotation->value as $transition) { if (is_array($transition) && count($transition) == 2 && is_string($transition[0]) && is_string($transition[1])) { foreach (array($transition[0], $transition[1]) as $state) { if ($state === null || strlen($state) == 0) { throw new \LogicException(sprintf('The value for annotation "%s" cannot be empty.', get_class($annotation))); } if (!in_array($state, $this->states)) { throw new \LogicException(sprintf('The value for annotation "%s" must be one of [ %s ], "%s" is specified.', get_class($annotation), implode(', ', $this->states), $state)); } } $pageflowBuilderDefinition->addMethodCall('addTransition', array($transition[0], $transition[1], $transition[1])); } else { throw new \LogicException(sprintf('The value for annotation "%s" must be string array, "%s" is specified.', get_class($annotation), var_export($transition, true))); } } } else { throw new \LogicException(sprintf('The value for annotation "%s" must be one of [ %s ], "%s" is specified.', get_class($pageflowAnnotation), implode(', ', array('"PHPMentors\\PageflowerBundle\\Annotation\\States"', '"PHPMentors\\PageflowerBundle\\Annotation\\Transitions"')), is_object($annotation) ? get_class($annotation) : $annotation)); } } $pageflowBuilderServiceId = 'phpmentors_pageflower.pageflow_builder.' . $this->controllerServiceId; $this->container->setDefinition($pageflowBuilderServiceId, $pageflowBuilderDefinition); $pageflowDefinition = new DefinitionDecorator('phpmentors_pageflower.pageflow'); $pageflowDefinition->setFactoryService($pageflowBuilderServiceId); $pageflowServiceId = 'phpmentors_pageflower.pageflow.' . $this->controllerServiceId; $this->container->setDefinition($pageflowServiceId, $pageflowDefinition); $this->container->getDefinition('phpmentors_pageflower.pageflow_repository')->addMethodCall('add', array(new Reference($pageflowServiceId))); $this->container->addClassResource($this->controllerClass); }
/** * Loads the services based on your application configuration. * * @param array $configs * @param ContainerBuilder $container * * @throws \InvalidArgumentException * @throws \LogicException */ public function load(array $configs, ContainerBuilder $container) { $config = $this->processConfiguration(new Configuration(), $configs); $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); $loader->load('view.xml'); $loader->load('routing.xml'); $loader->load('util.xml'); $loader->load('request.xml'); if (!empty($config['disable_csrf_role'])) { $loader->load('forms.xml'); $container->setParameter('fos_rest.disable_csrf_role', $config['disable_csrf_role']); } $container->setParameter('fos_rest.cache_dir', $config['cache_dir']); $formats = array(); foreach ($config['view']['formats'] as $format => $enabled) { if ($enabled) { $formats[$format] = false; } } foreach ($config['view']['templating_formats'] as $format => $enabled) { if ($enabled) { $formats[$format] = true; } } // The validator service alias is only set if validation is enabled for the request body converter $validator = $config['service']['validator']; unset($config['service']['validator']); if (null === $config['service']['serializer']) { $bundles = $container->getParameter('kernel.bundles'); if (isset($bundles['JMSSerializerBundle'])) { $config['service']['serializer'] = 'jms_serializer.serializer'; } else { throw new \InvalidArgumentException('JMSSerializerBundle is not available and no other serializer is configured. You must either enable the JMSSerializerBundle or configure a custom serializer.'); } } foreach ($config['service'] as $key => $service) { $container->setAlias($this->getAlias() . '.' . $key, $service); } if (!empty($config['serializer']['version'])) { $container->setParameter($this->getAlias() . '.serializer.exclusion_strategy.version', $config['serializer']['version']); } if (!empty($config['serializer']['groups'])) { $container->setParameter($this->getAlias() . '.serializer.exclusion_strategy.groups', $config['serializer']['groups']); } $container->setParameter($this->getAlias() . '.serializer.serialize_null', $config['serializer']['serialize_null']); $container->setParameter($this->getAlias() . '.formats', $formats); $container->setParameter($this->getAlias() . '.default_engine', $config['view']['default_engine']); foreach ($config['view']['force_redirects'] as $format => $code) { if (true === $code) { $config['view']['force_redirects'][$format] = Codes::HTTP_FOUND; } } $container->setParameter($this->getAlias() . '.force_redirects', $config['view']['force_redirects']); if (!is_numeric($config['view']['failed_validation'])) { $config['view']['failed_validation'] = constant('\\FOS\\RestBundle\\Util\\Codes::' . $config['view']['failed_validation']); } $container->setParameter($this->getAlias() . '.failed_validation', $config['view']['failed_validation']); if (!is_numeric($config['view']['empty_content'])) { $config['view']['empty_content'] = constant('\\FOS\\RestBundle\\Util\\Codes::' . $config['view']['empty_content']); } $container->setParameter($this->getAlias() . '.empty_content', $config['view']['empty_content']); $container->setParameter($this->getAlias() . '.serialize_null', $config['view']['serialize_null']); if (!empty($config['view']['view_response_listener'])) { $loader->load('view_response_listener.xml'); $container->setParameter($this->getAlias() . '.view_response_listener.force_view', 'force' === $config['view']['view_response_listener']); } $container->setParameter($this->getAlias() . '.routing.loader.default_format', $config['routing_loader']['default_format']); $container->setParameter($this->getAlias() . '.routing.loader.include_format', $config['routing_loader']['include_format']); foreach ($config['exception']['codes'] as $exception => $code) { if (!is_numeric($code)) { $config['exception']['codes'][$exception] = constant("\\FOS\\RestBundle\\Util\\Codes::{$code}"); } $this->testExceptionExists($exception); } foreach ($config['exception']['messages'] as $exception => $message) { $this->testExceptionExists($exception); } $container->setParameter($this->getAlias() . '.exception.codes', $config['exception']['codes']); $container->setParameter($this->getAlias() . '.exception.messages', $config['exception']['messages']); if (!empty($config['body_listener'])) { $loader->load('body_listener.xml'); $container->setParameter($this->getAlias() . '.throw_exception_on_unsupported_content_type', $config['body_listener']['throw_exception_on_unsupported_content_type']); $container->setParameter($this->getAlias() . '.decoders', $config['body_listener']['decoders']); $arrayNormalizer = $config['body_listener']['array_normalizer']; if (null !== $arrayNormalizer) { $container->getDefinition($this->getAlias() . '.body_listener')->addMethodCall('setArrayNormalizer', array(new Reference($arrayNormalizer))); } } if (!empty($config['format_listener']['rules'])) { $loader->load('format_listener.xml'); $container->setParameter($this->getAlias() . '.format_listener.rules', $config['format_listener']['rules']); if (!empty($config['format_listener']['media_type']['version_regex'])) { $container->setParameter($this->getAlias() . '.format_listener.media_type.version_regex', $config['format_listener']['media_type']['version_regex']); } else { $container->removeDefinition('fos_rest.version_listener'); } } if (!empty($config['view']['exception_wrapper_handler'])) { $container->setParameter($this->getAlias() . '.view.exception_wrapper_handler', $config['view']['exception_wrapper_handler']); } if (!empty($config['view']['jsonp_handler'])) { $handler = new DefinitionDecorator($config['service']['view_handler']); $handler->setPublic(true); $jsonpHandler = new Reference($this->getAlias() . '.view_handler.jsonp'); $handler->addMethodCall('registerHandler', array('jsonp', array($jsonpHandler, 'createResponse'))); $container->setDefinition($this->getAlias() . '.view_handler', $handler); $container->setParameter($this->getAlias() . '.view_handler.jsonp.callback_param', $config['view']['jsonp_handler']['callback_param']); if ('/(^[a-z0-9_]+$)|(^YUI\\.Env\\.JSONP\\._[0-9]+$)/i' !== $config['view']['jsonp_handler']['callback_filter']) { throw new \LogicException('As of 1.2.0, the "callback_filter" parameter is deprecated, and is not used anymore. For more information, read: https://github.com/FriendsOfSymfony/FOSRestBundle/pull/642.'); } if (empty($config['view']['mime_types']['jsonp'])) { $config['view']['mime_types']['jsonp'] = $config['view']['jsonp_handler']['mime_type']; } } if (!empty($config['view']['mime_types'])) { $loader->load('mime_type_listener.xml'); $container->setParameter($this->getAlias() . '.mime_types', $config['view']['mime_types']); } else { $container->setParameter($this->getAlias() . '.mime_types', array()); } if (!empty($config['param_fetcher_listener'])) { $loader->load('param_fetcher_listener.xml'); if ('force' === $config['param_fetcher_listener']) { $container->setParameter($this->getAlias() . '.param_fetcher_listener.set_params_as_attributes', true); } } if (!empty($config['allowed_methods_listener'])) { $loader->load('allowed_methods_listener.xml'); } if (!empty($config['access_denied_listener'])) { $loader->load('access_denied_listener.xml'); $container->setParameter($this->getAlias() . '.access_denied_listener.formats', $config['access_denied_listener']); $container->setParameter($this->getAlias() . '.access_denied_listener.unauthorized_challenge', $config['unauthorized_challenge']); } if (!empty($config['body_converter'])) { if (!empty($config['body_converter']['enabled'])) { $parameter = new \ReflectionParameter(array('Sensio\\Bundle\\FrameworkExtraBundle\\Request\\ParamConverter\\ParamConverterInterface', 'supports'), 'configuration'); if ('Sensio\\Bundle\\FrameworkExtraBundle\\Configuration\\ParamConverter' == $parameter->getClass()->getName()) { $container->setParameter('fos_rest.converter.request_body.class', 'FOS\\RestBundle\\Request\\RequestBodyParamConverter'); } else { $container->setParameter('fos_rest.converter.request_body.class', 'FOS\\RestBundle\\Request\\RequestBodyParamConverter20'); } $loader->load('request_body_param_converter.xml'); } if (!empty($config['body_converter']['validate'])) { $container->setAlias($this->getAlias() . '.validator', $validator); } if (!empty($config['body_converter']['validation_errors_argument'])) { $container->setParameter('fos_rest.converter.request_body.validation_errors_argument', $config['body_converter']['validation_errors_argument']); } } }
private function loadView(array $config, XmlFileLoader $loader, ContainerBuilder $container) { if (!empty($config['view']['exception_wrapper_handler'])) { $container->setParameter('fos_rest.view.exception_wrapper_handler', $config['view']['exception_wrapper_handler']); } if (!empty($config['view']['jsonp_handler'])) { $handler = new DefinitionDecorator($config['service']['view_handler']); $handler->setPublic(true); $jsonpHandler = new Reference('fos_rest.view_handler.jsonp'); $handler->addMethodCall('registerHandler', array('jsonp', array($jsonpHandler, 'createResponse'))); $container->setDefinition('fos_rest.view_handler', $handler); $container->setParameter('fos_rest.view_handler.jsonp.callback_param', $config['view']['jsonp_handler']['callback_param']); if ('/(^[a-z0-9_]+$)|(^YUI\\.Env\\.JSONP\\._[0-9]+$)/i' !== $config['view']['jsonp_handler']['callback_filter']) { throw new \LogicException('As of 1.2.0, the "callback_filter" parameter is deprecated, and is not used anymore. For more information, read: https://github.com/FriendsOfSymfony/FOSRestBundle/pull/642.'); } if (empty($config['view']['mime_types']['jsonp'])) { $config['view']['mime_types']['jsonp'] = $config['view']['jsonp_handler']['mime_type']; } } if ($config['view']['mime_types']['enabled']) { $loader->load('mime_type_listener.xml'); if (!empty($config['mime_type_listener']['service'])) { $service = $container->getDefinition('fos_rest.mime_type_listener'); $service->clearTag('kernel.event_listener'); } $container->setParameter('fos_rest.mime_types', $config['view']['mime_types']); } else { $container->setParameter('fos_rest.mime_types', array()); } if ($config['view']['view_response_listener']['enabled']) { $loader->load('view_response_listener.xml'); if (!empty($config['view_response_listener']['service'])) { $service = $container->getDefinition('fos_rest.view_response_listener'); $service->clearTag('kernel.event_listener'); } $container->setParameter('fos_rest.view_response_listener.force_view', $config['view']['view_response_listener']['force']); } $formats = array(); foreach ($config['view']['formats'] as $format => $enabled) { if ($enabled) { $formats[$format] = false; } } foreach ($config['view']['templating_formats'] as $format => $enabled) { if ($enabled) { $formats[$format] = true; } } $container->setParameter('fos_rest.formats', $formats); foreach ($config['view']['force_redirects'] as $format => $code) { if (true === $code) { $config['view']['force_redirects'][$format] = Codes::HTTP_FOUND; } } $container->setParameter('fos_rest.force_redirects', $config['view']['force_redirects']); if (!is_numeric($config['view']['failed_validation'])) { $config['view']['failed_validation'] = constant('\\FOS\\RestBundle\\Util\\Codes::' . $config['view']['failed_validation']); } $container->setParameter('fos_rest.failed_validation', $config['view']['failed_validation']); if (!is_numeric($config['view']['empty_content'])) { $config['view']['empty_content'] = constant('\\FOS\\RestBundle\\Util\\Codes::' . $config['view']['empty_content']); } $container->setParameter('fos_rest.empty_content', $config['view']['empty_content']); $container->setParameter('fos_rest.serialize_null', $config['view']['serialize_null']); $container->setParameter('fos_rest.default_engine', $config['view']['default_engine']); }
/** * Loads a configured DBAL connection. * * @param string $name The name of the connection * @param array $connection A dbal connection configuration. * @param ContainerBuilder $container A ContainerBuilder instance */ protected function loadDbalConnection($name, array $connection, ContainerBuilder $container) { // configuration $configuration = $container->setDefinition(sprintf('doctrine.dbal.%s_connection.configuration', $name), new DefinitionDecorator('doctrine.dbal.connection.configuration')); $logger = null; if ($connection['logging']) { $logger = new Reference('doctrine.dbal.logger'); } unset($connection['logging']); if ($connection['profiling']) { $profilingLoggerId = 'doctrine.dbal.logger.profiling.' . $name; $container->setDefinition($profilingLoggerId, new DefinitionDecorator('doctrine.dbal.logger.profiling')); $profilingLogger = new Reference($profilingLoggerId); $container->getDefinition('data_collector.doctrine')->addMethodCall('addLogger', array($name, $profilingLogger)); if (null !== $logger) { $chainLogger = new DefinitionDecorator('doctrine.dbal.logger.chain'); $chainLogger->addMethodCall('addLogger', array($profilingLogger)); $loggerId = 'doctrine.dbal.logger.chain.' . $name; $container->setDefinition($loggerId, $chainLogger); $logger = new Reference($loggerId); } else { $logger = $profilingLogger; } } unset($connection['profiling']); if (isset($connection['auto_commit'])) { $configuration->addMethodCall('setAutoCommit', array($connection['auto_commit'])); } unset($connection['auto_commit']); if (isset($connection['schema_filter']) && $connection['schema_filter']) { $configuration->addMethodCall('setFilterSchemaAssetsExpression', array($connection['schema_filter'])); } unset($connection['schema_filter']); if ($logger) { $configuration->addMethodCall('setSQLLogger', array($logger)); } // event manager $container->setDefinition(sprintf('doctrine.dbal.%s_connection.event_manager', $name), new DefinitionDecorator('doctrine.dbal.connection.event_manager')); // connection // PDO ignores the charset property before 5.3.6 so the init listener has to be used instead. if (isset($connection['charset']) && version_compare(PHP_VERSION, '5.3.6', '<')) { if (isset($connection['driver']) && stripos($connection['driver'], 'mysql') !== false || isset($connection['driver_class']) && stripos($connection['driver_class'], 'mysql') !== false) { $mysqlSessionInit = new Definition('%doctrine.dbal.events.mysql_session_init.class%'); $mysqlSessionInit->setArguments(array($connection['charset'])); $mysqlSessionInit->setPublic(false); $mysqlSessionInit->addTag('doctrine.event_subscriber', array('connection' => $name)); $container->setDefinition(sprintf('doctrine.dbal.%s_connection.events.mysqlsessioninit', $name), $mysqlSessionInit); unset($connection['charset']); } } $options = $this->getConnectionOptions($connection); $def = $container->setDefinition(sprintf('doctrine.dbal.%s_connection', $name), new DefinitionDecorator('doctrine.dbal.connection'))->setArguments(array($options, new Reference(sprintf('doctrine.dbal.%s_connection.configuration', $name)), new Reference(sprintf('doctrine.dbal.%s_connection.event_manager', $name)), $connection['mapping_types'])); if (!empty($connection['use_savepoints'])) { $def->addMethodCall('setNestTransactionsWithSavepoints', array($connection['use_savepoints'])); } }
/** * Configures the redirect subscriber definition. * * @param \Symfony\Component\DependencyInjection\Definition $subscriber The subscriber. * @param array $redirect The redirect. * @param string $adapterName The adapter name. * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container The container. */ private function configureRedirectSubscriberDefinition(Definition $subscriber, array $redirect, $adapterName, ContainerBuilder $container) { $model = new DefinitionDecorator(self::createServiceName('subscriber.redirect.model')); if (isset($redirect['max'])) { $model->addMethodCall('setMax', array($redirect['max'])); } if (isset($redirect['strict'])) { $model->addMethodCall('setStrict', array($redirect['strict'])); } if (isset($redirect['throw_exception'])) { $model->addMethodCall('setThrowException', array($redirect['throw_exception'])); } $container->setDefinition($service = self::createServiceName($adapterName . '.redirect.model'), $model); $subscriber->setArguments(array(new Reference($service))); }