/** * 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); } }
public function process(ContainerBuilder $container) { if (!($container->hasDefinition('fragment.listener') && $container->hasDefinition('ezpublish.decorated_fragment_renderer'))) { return null; } $fragmentListenerDef = $container->findDefinition('fragment.listener'); $fragmentListenerDef->setFactoryService('ezpublish.fragment_listener.factory')->setFactoryMethod('buildFragmentListener')->addArgument('%fragment.listener.class%'); // Looping over all fragment renderers to decorate them // This is to make sure they are siteaccess aware (siteaccess is serialized in rendered path). foreach ($container->findTaggedServiceIds('kernel.fragment_renderer') as $id => $attributes) { $renamedId = "{$id}.inner"; $definition = $container->getDefinition($id); $public = $definition->isPublic(); $tags = $definition->getTags(); $definition->setPublic(false); $container->setDefinition($renamedId, $definition); $decoratedDef = new DefinitionDecorator('ezpublish.decorated_fragment_renderer'); $decoratedDef->setArguments(array(new Reference($renamedId))); $decoratedDef->setPublic($public); $decoratedDef->setTags($tags); // Special treatment for inline fragment renderer, to fit ESI renderer constructor type hinting (forced to InlineFragmentRenderer) if ($id === 'fragment.renderer.inline') { $decoratedDef->setClass($container->getParameter('ezpublish.decorated_fragment_renderer.inline.class')); } $container->setDefinition($id, $decoratedDef); } }
/** * Returns a definition for an asset package. * * @param ContainerBuilder $container Container * @param array $httpUrls SSL assets_base_urls * @param array $sslUrls assets_base_urls * @param string $rootDir Directory where to look for reved assets * @param string $summaryFile Grunt filerev summary file * @param string $cacheDir Kernel cache dir * @param bool $debug Debug mode? * @param string $name Package name * * @return DefinitionDecorator */ private function createPackageDefinition(ContainerBuilder $container, array $httpUrls, array $sslUrls, $rootDir, $summaryFile, $cacheDir, $debug, $name = null) { if (!$httpUrls) { $package = new DefinitionDecorator('grunt.filerev.templating.asset.path_package'); $package->setPublic(false)->setScope('request')->replaceArgument(1, $rootDir)->replaceArgument(2, $summaryFile)->replaceArgument(3, $cacheDir)->replaceArgument(4, $debug); return $package; } if ($httpUrls == $sslUrls) { $package = new DefinitionDecorator('grunt.filerev.templating.asset.url_package'); $package->setPublic(false)->replaceArgument(0, $sslUrls)->replaceArgument(1, $rootDir)->replaceArgument(2, $summaryFile)->replaceArgument(3, $cacheDir)->replaceArgument(4, $debug); return $package; } $prefix = $name ? 'templating.asset.package.' . $name : 'templating.asset.default_package'; $httpPackage = new DefinitionDecorator('grunt.filerev.templating.asset.url_package'); $httpPackage->replaceArgument(0, $httpUrls)->replaceArgument(1, $rootDir)->replaceArgument(2, $summaryFile)->replaceArgument(3, $cacheDir)->replaceArgument(4, $debug); $container->setDefinition($prefix . '.http', $httpPackage); if ($sslUrls) { $sslPackage = new DefinitionDecorator('grunt.filerev.templating.asset.url_package'); $sslPackage->replaceArgument(0, $sslUrls)->replaceArgument(1, $rootDir)->replaceArgument(2, $summaryFile)->replaceArgument(3, $cacheDir)->replaceArgument(4, $debug); } else { $sslPackage = new DefinitionDecorator('grunt.filerev.templating.asset.path_package'); $sslPackage->setScope('request')->replaceArgument(1, $rootDir)->replaceArgument(2, $summaryFile)->replaceArgument(3, $cacheDir)->replaceArgument(4, $debug); } $container->setDefinition($prefix . '.ssl', $sslPackage); $package = new DefinitionDecorator('templating.asset.request_aware_package'); $package->setPublic(false)->setScope('request')->replaceArgument(1, $prefix . '.http')->replaceArgument(2, $prefix . '.ssl'); return $package; }
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; }
/** * {@inheritdoc} */ public function load(array $configs, ContainerBuilder $container) { $configuration = new Configuration(); $config = $this->processConfiguration($configuration, $configs); $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); $loader->load('services.yml'); foreach ($config['connections'] as $name => $values) { $def = new Definition(); $def->setClass($container->getParameter('agentsib_sphinx.connection.class')); $params = array('host' => $values['host'], 'port' => $values['port']); if ($values['socket']) { $params['socket'] = $values['socket']; } $def->setArguments(array($name, $values['driver'], $params)); $def->addMethodCall('addLogger', array(new Reference('agentsib_sphinx.logger'))); $container->setDefinition(sprintf('agentsib_sphinx.%s.connection', $name), $def); $helperDef = new DefinitionDecorator('agentsib_sphinx.factory.helper'); $helperDef->setFactoryClass($container->getParameter('agentsib_sphinx.helper.class')); $helperDef->setFactoryMethod('create'); $helperDef->addArgument(new Reference(sprintf('agentsib_sphinx.%s.connection', $name))); $helperDef->setPublic(true); $container->setDefinition(sprintf('agentsib_sphinx.%s.helper', $name), $helperDef); if ($name == $config['default_connection']) { $container->setAlias('agentsib_sphinx.connection', sprintf('agentsib_sphinx.%s.connection', $name)); $container->setAlias('agentsib_sphinx.helper', sprintf('agentsib_sphinx.%s.helper', $name)); } } }
/** * {@inheritDoc} */ public function process(ContainerBuilder $container) { foreach ($container->findTaggedServiceIds('payum.storage_extension') as $id => $tagAttributes) { foreach ($tagAttributes as $attributes) { $paymentIds = array(); if (isset($attributes['all']) && $attributes['all']) { $paymentIds = array_merge($paymentIds, $this->findAllPaymentIds($container)); } if (isset($attributes['factory']) && $attributes['factory']) { $paymentIds = array_merge($paymentIds, $this->findPaymentIdsByFactory($container, $attributes['factory'])); } if (isset($attributes['context']) && $attributes['context']) { $paymentIds = array_merge($paymentIds, $this->findPaymentIdsByContext($container, $attributes['context'])); } $paymentIds = array_filter(array_unique($paymentIds)); foreach ($paymentIds as $paymentId) { $storageExtension = new DefinitionDecorator('payum.extension.storage.prototype'); $storageExtension->replaceArgument(0, new Reference($id)); $storageExtension->setPublic(false); if (false !== strpos($id, '.storage.')) { $storageExtensionId = str_replace('.storage.', '.extension.storage.', $id); } else { throw new LogicException(sprintf('In order to add storage to extension the storage %id has to contains ".storage." inside.', $id)); } $container->setDefinition($storageExtensionId, $storageExtension); $payment = $container->getDefinition($paymentId); $payment->addMethodCall('addExtension', array(new Reference($storageExtensionId), isset($attributes['prepend']) && $attributes['prepend'])); } } } }
/** * {@inheritDoc} */ protected function createStorage(ContainerBuilder $container, $modelClass, array $config) { $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../../../Resources/config/storage')); $loader->load('propel1.xml'); $storage = new DefinitionDecorator('payum.storage.propel1'); $storage->setPublic(true); $storage->replaceArgument(0, $modelClass); return $storage; }
/** * {@inheritDoc} */ protected function createStorage(ContainerBuilder $container, $modelClass, array $config) { $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../../../Resources/config/storage')); $loader->load('doctrine.' . $config['driver'] . '.xml'); $storage = new DefinitionDecorator(sprintf('payum.storage.doctrine.%s', $config['driver'])); $storage->setPublic(true); $storage->replaceArgument(1, $modelClass); return $storage; }
/** * {@inheritDoc} */ protected function addApis(Definition $paymentDefinition, ContainerBuilder $container, $contextName, array $config) { $apiDefinition = new DefinitionDecorator('payum.be2bill.api.prototype'); $apiDefinition->replaceArgument(1, array('identifier' => $config['identifier'], 'password' => $config['password'], 'sandbox' => $config['sandbox'])); $apiDefinition->setPublic(true); $apiId = 'payum.context.' . $contextName . '.api'; $container->setDefinition($apiId, $apiDefinition); $paymentDefinition->addMethodCall('addApi', array(new Reference($apiId))); }
/** * {@inheritDoc} */ protected function addApis(Definition $paymentDefinition, ContainerBuilder $container, $contextName, array $config) { $apiDefinition = new DefinitionDecorator('payum.limonetik.api.prototype'); $apiDefinition->replaceArgument(0, array('merchantId' => $config['merchant_id'], 'key' => $config['key'], 'sandbox' => $config['sandbox'])); $apiDefinition->setPublic(true); $apiId = 'payum.context.' . $contextName . '.api'; $container->setDefinition($apiId, $apiDefinition); $paymentDefinition->addMethodCall('addApi', array(new Reference($apiId))); }
/** * {@inheritDoc} */ protected function addApis(Definition $paymentDefinition, ContainerBuilder $container, $contextName, array $config) { $apiDefinition = new DefinitionDecorator('payum.paypal.express_checkout_nvp.api.prototype'); $apiDefinition->replaceArgument(0, array('username' => $config['username'], 'password' => $config['password'], 'signature' => $config['signature'], 'sandbox' => $config['sandbox'])); $apiDefinition->setPublic(true); $apiId = 'payum.context.' . $contextName . '.api'; $container->setDefinition($apiId, $apiDefinition); $paymentDefinition->addMethodCall('addApi', array(new Reference($apiId))); }
/** * {@inheritDoc} */ protected function addApis(Definition $paymentDefinition, ContainerBuilder $container, $contextName, array $config) { $publishableKey = new DefinitionDecorator('payum.stripe.keys.prototype'); $publishableKey->replaceArgument(0, $config['publishable_key']); $publishableKey->replaceArgument(1, $config['secret_key']); $publishableKey->setPublic(true); $publishableKeyId = 'payum.context.' . $contextName . '.keys'; $container->setDefinition($publishableKeyId, $publishableKey); $paymentDefinition->addMethodCall('addApi', array(new Reference($publishableKeyId))); }
/** * Converts class hierarchy metadata to definition instances. * * @param ClassHierarchyMetadata $metadata * @return array an array of Definition instances */ public function convert(ClassHierarchyMetadata $metadata) { static $count = 0; $definitions = array(); $previous = null; foreach ($metadata->classMetadata as $classMetadata) { if (null === $previous && null === $classMetadata->parent) { $definition = new Definition(); } else { $definition = new DefinitionDecorator($classMetadata->parent ?: $previous->id); } $definition->setClass($classMetadata->name); if (null !== $classMetadata->scope) { $definition->setScope($classMetadata->scope); } if (null !== $classMetadata->public) { $definition->setPublic($classMetadata->public); } if (null !== $classMetadata->abstract) { $definition->setAbstract($classMetadata->abstract); } if (null !== $classMetadata->lazy) { $definition->setLazy($classMetadata->lazy); } if (null !== $classMetadata->arguments) { $definition->setArguments($classMetadata->arguments); } $definition->setMethodCalls($classMetadata->methodCalls); $definition->setTags($classMetadata->tags); $definition->setProperties($classMetadata->properties); if (null !== $classMetadata->decorates) { if (!method_exists($definition, 'setDecoratedService')) { throw new InvalidAnnotationException(sprintf("decorations require symfony >=2.8 on class %s", $classMetadata->name)); } $definition->setDecoratedService($classMetadata->decorates, $classMetadata->decoration_inner_name); } if (null !== $classMetadata->deprecated && method_exists($definition, 'setDeprecated')) { $definition->setDeprecated(true, $classMetadata->deprecated); } if (null === $classMetadata->id) { $classMetadata->id = '_jms_di_extra.unnamed.service_' . $count++; } if (0 !== count($classMetadata->initMethods)) { foreach ($classMetadata->initMethods as $initMethod) { $definition->addMethodCall($initMethod); } } elseif (null !== $classMetadata->initMethod) { @trigger_error('ClassMetadata::$initMethod is deprecated since version 1.7 and will be removed in 2.0. Use ClassMetadata::$initMethods instead.', E_USER_DEPRECATED); $definition->addMethodCall($classMetadata->initMethod); } $definitions[$classMetadata->id] = $definition; $previous = $classMetadata; } return $definitions; }
/** * Returns a definition for an asset package. */ private function createPackageDefinition($basePath, array $baseUrls, Reference $version) { if ($basePath && $baseUrls) { throw new \LogicException('An asset package cannot have base URLs and base paths.'); } if (!$baseUrls) { $package = new DefinitionDecorator('assets.path_package'); return $package->setPublic(false)->replaceArgument(0, $basePath)->replaceArgument(1, $version); } $package = new DefinitionDecorator('assets.url_package'); return $package->setPublic(false)->replaceArgument(0, $baseUrls)->replaceArgument(1, $version); }
/** * {@inheritDoc} */ protected function addApis(Definition $paymentDefinition, ContainerBuilder $container, $contextName, array $config) { $options = array('merchant_id' => $config['merchant_id'], 'merchant_password' => $config['merchant_password'], 'receiver_email' => $config['receiver_email'], 'sandbox' => $config['sandbox']); if (isset($config['sandbox_url'])) { $options['sandbox_url'] = $config['sandbox_url']; } $apiDefinition = new DefinitionDecorator('eki.payum.nganluong.api.prototype'); $apiDefinition->replaceArgument(0, $options); $apiDefinition->setPublic(true); $apiId = 'payum.context.' . $contextName . '.api'; $container->setDefinition($apiId, $apiDefinition); $paymentDefinition->addMethodCall('addApi', array(new Reference($apiId))); }
/** {@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))); } } }
/** * Converts class hierarchy metadata to definition instances. * * @param ClassHierarchyMetadata $metadata * @return array an array of Definition instances */ public function convert(ClassHierarchyMetadata $metadata) { static $count = 0; $definitions = array(); $previous = null; foreach ($metadata->classMetadata as $classMetadata) { if (null === $previous && null === $classMetadata->parent) { $definition = new Definition(); } else { $definition = new DefinitionDecorator($classMetadata->parent ?: $previous->id); } $definition->setClass($classMetadata->name); if (null !== $classMetadata->scope) { $definition->setScope($classMetadata->scope); } if (null !== $classMetadata->public) { $definition->setPublic($classMetadata->public); } if (null !== $classMetadata->abstract) { $definition->setAbstract($classMetadata->abstract); } if (null !== $classMetadata->arguments) { $definition->setArguments($classMetadata->arguments); } $definition->setMethodCalls($classMetadata->methodCalls); $definition->setTags($classMetadata->tags); $definition->setProperties($classMetadata->properties); if (null === $classMetadata->id) { $classMetadata->id = '_jms_di_extra.unnamed.service_' . $count++; } if ($classMetadata->initMethod) { if (!method_exists($definition, 'setInitMethod')) { throw new \RuntimeException(sprintf('@AfterSetup is not available on your Symfony version.')); } $definition->setInitMethod($classMetadata->initMethod); } $definitions[$classMetadata->id] = $definition; $previous = $classMetadata; } return $definitions; }
/** * {@inheritDoc} */ protected function addApis(Definition $paymentDefinition, ContainerBuilder $container, $contextName, array $config) { $orderApiDefinition = new DefinitionDecorator('payum.payex.api.order.prototype'); $orderApiDefinition->replaceArgument(1, array('encryptionKey' => $config['encryption_key'], 'accountNumber' => $config['account_number'], 'sandbox' => $config['sandbox'])); $orderApiDefinition->setPublic(true); $orderApiId = 'payum.context.' . $contextName . '.api.order'; $container->setDefinition($orderApiId, $orderApiDefinition); $paymentDefinition->addMethodCall('addApi', array(new Reference($orderApiId))); $agreementApiDefinition = new DefinitionDecorator('payum.payex.api.agreement.prototype'); $agreementApiDefinition->replaceArgument(1, array('encryptionKey' => $config['encryption_key'], 'accountNumber' => $config['account_number'], 'sandbox' => $config['sandbox'])); $agreementApiDefinition->setPublic(true); $agreementApiId = 'payum.context.' . $contextName . '.api.agreement'; $container->setDefinition($agreementApiId, $agreementApiDefinition); $paymentDefinition->addMethodCall('addApi', array(new Reference($agreementApiId))); $recurringApiDefinition = new DefinitionDecorator('payum.payex.api.recurring.prototype'); $recurringApiDefinition->replaceArgument(1, array('encryptionKey' => $config['encryption_key'], 'accountNumber' => $config['account_number'], 'sandbox' => $config['sandbox'])); $recurringApiDefinition->setPublic(true); $recurringApiId = 'payum.context.' . $contextName . '.api.recurring'; $container->setDefinition($recurringApiId, $recurringApiDefinition); $paymentDefinition->addMethodCall('addApi', array(new Reference($recurringApiId))); }
/** * Returns a definition for an asset package. */ private function createPackageDefinition(ContainerBuilder $container, array $httpUrls, array $sslUrls, $version, $format, $name = null) { if (!$httpUrls) { $package = new DefinitionDecorator('templating.asset.path_package'); $package->setPublic(false)->setScope('request')->replaceArgument(1, $version)->replaceArgument(2, $format); return $package; } if ($httpUrls == $sslUrls) { $package = new DefinitionDecorator('templating.asset.url_package'); $package->setPublic(false)->replaceArgument(0, $sslUrls)->replaceArgument(1, $version)->replaceArgument(2, $format); return $package; } $prefix = $name ? 'templating.asset.package.' . $name : 'templating.asset.default_package'; $httpPackage = new DefinitionDecorator('templating.asset.url_package'); $httpPackage->replaceArgument(0, $httpUrls)->replaceArgument(1, $version)->replaceArgument(2, $format); $container->setDefinition($prefix . '.http', $httpPackage); if ($sslUrls) { $sslPackage = new DefinitionDecorator('templating.asset.url_package'); $sslPackage->replaceArgument(0, $sslUrls)->replaceArgument(1, $version)->replaceArgument(2, $format); } else { $sslPackage = new DefinitionDecorator('templating.asset.path_package'); $sslPackage->setScope('request')->replaceArgument(1, $version)->replaceArgument(2, $format); } $container->setDefinition($prefix . '.ssl', $sslPackage); $package = new DefinitionDecorator('templating.asset.request_aware_package'); $package->setPublic(false)->setScope('request')->replaceArgument(1, $prefix . '.http')->replaceArgument(2, $prefix . '.ssl'); return $package; }
private function registerCacheConfiguration(array $config, ContainerBuilder $container) { $version = substr(str_replace('/', '-', base64_encode(md5(uniqid(mt_rand(), true), true))), 0, -2); $container->getDefinition('cache.adapter.apcu')->replaceArgument(2, $version); $container->getDefinition('cache.adapter.system')->replaceArgument(2, $version); $container->getDefinition('cache.adapter.filesystem')->replaceArgument(2, $config['directory']); foreach (array('doctrine', 'psr6', 'redis') as $name) { if (isset($config[$name = 'default_' . $name . '_provider'])) { $container->setAlias('cache.' . $name, Compiler\CachePoolPass::getServiceProvider($container, $config[$name])); } } foreach (array('app', 'system') as $name) { $config['pools']['cache.' . $name] = array('adapter' => $config[$name], 'public' => true); } foreach ($config['pools'] as $name => $pool) { $definition = new DefinitionDecorator($pool['adapter']); $definition->setPublic($pool['public']); unset($pool['adapter'], $pool['public']); $definition->addTag('cache.pool', $pool); $container->setDefinition($name, $definition); } if (method_exists(PropertyAccessor::class, 'createCache')) { $propertyAccessDefinition = $container->register('cache.property_access', AdapterInterface::class); $propertyAccessDefinition->setPublic(false); $propertyAccessDefinition->setFactory(array(PropertyAccessor::class, 'createCache')); $propertyAccessDefinition->setArguments(array(null, null, $version, new Reference('logger', ContainerInterface::IGNORE_ON_INVALID_REFERENCE))); $propertyAccessDefinition->addTag('cache.pool', array('clearer' => 'cache.default_clearer')); $propertyAccessDefinition->addTag('monolog.logger', array('channel' => 'cache')); } $this->addClassesToCompile(array('Symfony\\Component\\Cache\\Adapter\\ApcuAdapter', 'Symfony\\Component\\Cache\\Adapter\\FilesystemAdapter', 'Symfony\\Component\\Cache\\CacheItem')); }
/** * Loads 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 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)))); }
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']); }
private function registerCacheConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader) { foreach ($config['pools'] as $name => $poolConfig) { $poolDefinition = new DefinitionDecorator($poolConfig['adapter']); $poolDefinition->setPublic($poolConfig['public']); unset($poolConfig['adapter'], $poolConfig['public']); $poolDefinition->addTag('cache.pool', $poolConfig); $container->setDefinition('cache.pool.' . $name, $poolDefinition); } $this->addClassesToCompile(array('Psr\\Cache\\CacheItemInterface', 'Psr\\Cache\\CacheItemPoolInterface', 'Symfony\\Component\\Cache\\Adapter\\AdapterInterface', 'Symfony\\Component\\Cache\\Adapter\\AbstractAdapter', 'Symfony\\Component\\Cache\\CacheItem')); }
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']); }
/** * 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; }
/** * Loads doctrine listeners to handle indexing of new or updated objects. * * @param array $typeConfig * @param ContainerBuilder $container * @param string $objectPersisterId * @param string $indexName * @param string $typeName * @return string */ private function loadTypeListener(array $typeConfig, ContainerBuilder $container, $objectPersisterId, $indexName, $typeName) { if (isset($typeConfig['listener']['service'])) { return $typeConfig['listener']['service']; } /* Note: listener services may conflict with "prototype.driver", if the * index and type names were "prototype" and a driver, respectively. */ $abstractListenerId = sprintf('fos_elastica.listener.prototype.%s', $typeConfig['driver']); $listenerId = sprintf('fos_elastica.listener.%s.%s', $indexName, $typeName); $listenerDef = new DefinitionDecorator($abstractListenerId); $listenerDef->replaceArgument(0, new Reference($objectPersisterId)); $listenerDef->replaceArgument(1, $this->getDoctrineEvents($typeConfig)); $listenerConfig = array('identifier' => $typeConfig['identifier'], 'indexName' => $indexName, 'typeName' => $typeName); if ($typeConfig['listener']['logger']) { $listenerDef->replaceArgument(4, new Reference($typeConfig['listener']['logger'])); } switch ($typeConfig['driver']) { case 'orm': $listenerDef->addTag('doctrine.event_subscriber'); break; case 'mongodb': $listenerDef->addTag('doctrine_mongodb.odm.event_subscriber'); break; } if ($typeConfig['listener']['async']) { $listenerDef->setPublic(true); $listenerDef->addTag('kernel.event_listener', array('event' => 'kernel.terminate', 'method' => 'onKernelTerminate')); $listenerDef->addTag('kernel.event_listener', array('event' => 'console.terminate', 'method' => 'onConsoleTerminate')); $listenerConfig['async'] = true; $listenerConfig['defer'] = true; } $listenerDef->replaceArgument(3, $listenerConfig); $container->setDefinition($listenerId, $listenerDef); return $listenerId; }
/** * @param array $config * @param ContainerBuilder $container */ protected function loadStorages(array $config, ContainerBuilder $container) { foreach ($config as $modelClass => $storageConfig) { $storageFactoryName = $this->findSelectedStorageFactoryNameInStorageConfig($storageConfig); $storageId = $this->storageFactories[$storageFactoryName]->create( $container, $modelClass, $storageConfig[$storageFactoryName] ); $container->getDefinition($storageId)->addTag('payum.storage', array('model_class' => $modelClass)); if (false !== strpos($storageId, '.storage.')) { $storageExtensionId = str_replace('.storage.', '.extension.storage.', $storageId); } else { throw new LogicException(sprintf('In order to add storage to extension the storage %id has to contains ".storage." inside.', $storageId)); } $storageExtension = new DefinitionDecorator('payum.extension.storage.prototype'); $storageExtension->replaceArgument(0, new Reference($storageId)); $storageExtension->setPublic(true); $container->setDefinition($storageExtensionId, $storageExtension); if ($storageConfig['extension']['all']) { $storageExtension->addTag('payum.extension', array('all' => true)); } else { foreach ($storageConfig['extension']['payments'] as $paymentName) { $storageExtension->addTag('payum.extension', array('payment' => $paymentName)); } foreach ($storageConfig['extension']['factories'] as $factory) { $storageExtension->addTag('payum.extension', array('factory' => $factory)); } } } }
/** * Register the symmetric cryptors in container * * @param string $name cryptor name * @param array $cryptorConfig cryptor config * @param Definition $registryDefinition registry service definition * @param ContainerBuilder $container container */ protected function registerAesCryptor($name, $cryptorConfig, Definition $registryDefinition, ContainerBuilder $container) { $keyReaderDefinition = new DefinitionDecorator('gtt.crypt.aes.key_reader'); $keyReaderDefinition->replaceArgument(0, $cryptorConfig['key_path']); $keyReaderDefinition->setPublic(false); $keyReaderDefinitionId = "gtt.crypt.aes.key_reader.{$name}"; $container->setDefinition($keyReaderDefinitionId, $keyReaderDefinition); $keyReaderReference = new Reference($keyReaderDefinitionId); $aesEncryptorDefinition = new DefinitionDecorator('gtt.crypt.aes.encryptor'); $aesEncryptorDefinition->replaceArgument(0, $keyReaderReference); $aesEncryptorDefinition->replaceArgument(1, $cryptorConfig['binary_output']); $aesDecryptorDefinition = new DefinitionDecorator('gtt.crypt.aes.decryptor'); $aesDecryptorDefinition->replaceArgument(0, $keyReaderReference); $aesDecryptorDefinition->replaceArgument(1, $cryptorConfig['binary_output']); $this->setCryptorsPair($name, $container, $registryDefinition, $aesEncryptorDefinition, $aesDecryptorDefinition); }
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']); }