/**
  * {@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']);
 }
Example #15
0
 /**
  * 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);
 }
Example #26
0
 /**
  * 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']);
         }
     }
 }
Example #27
0
 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)));
 }