vendor/liip/imagine-bundle/DependencyInjection/LiipImagineExtension.php line 61

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the `liip/LiipImagineBundle` project.
  4.  *
  5.  * (c) https://github.com/liip/LiipImagineBundle/graphs/contributors
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE.md
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Liip\ImagineBundle\DependencyInjection;
  11. use Liip\ImagineBundle\DependencyInjection\Factory\Loader\LoaderFactoryInterface;
  12. use Liip\ImagineBundle\DependencyInjection\Factory\Resolver\ResolverFactoryInterface;
  13. use Liip\ImagineBundle\Imagine\Cache\CacheManager;
  14. use Liip\ImagineBundle\Imagine\Data\DataManager;
  15. use Liip\ImagineBundle\Imagine\Filter\FilterManager;
  16. use Symfony\Component\Config\FileLocator;
  17. use Symfony\Component\DependencyInjection\Alias;
  18. use Symfony\Component\DependencyInjection\ContainerBuilder;
  19. use Symfony\Component\DependencyInjection\Definition;
  20. use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
  21. use Symfony\Component\HttpKernel\DependencyInjection\Extension;
  22. use Symfony\Component\Mime\MimeTypeGuesserInterface;
  23. use Symfony\Component\Mime\MimeTypes;
  24. class LiipImagineExtension extends Extension
  25. {
  26.     /**
  27.      * @var ResolverFactoryInterface[]
  28.      */
  29.     private $resolversFactories = [];
  30.     /**
  31.      * @var LoaderFactoryInterface[]
  32.      */
  33.     private $loadersFactories = [];
  34.     /**
  35.      * @param ResolverFactoryInterface $resolverFactory
  36.      */
  37.     public function addResolverFactory(ResolverFactoryInterface $resolverFactory)
  38.     {
  39.         $this->resolversFactories[$resolverFactory->getName()] = $resolverFactory;
  40.     }
  41.     /**
  42.      * @param LoaderFactoryInterface $loaderFactory
  43.      */
  44.     public function addLoaderFactory(LoaderFactoryInterface $loaderFactory)
  45.     {
  46.         $this->loadersFactories[$loaderFactory->getName()] = $loaderFactory;
  47.     }
  48.     /**
  49.      * {@inheritdoc}
  50.      */
  51.     public function getConfiguration(array $configContainerBuilder $container)
  52.     {
  53.         return new Configuration($this->resolversFactories$this->loadersFactories);
  54.     }
  55.     /**
  56.      * @see \Symfony\Component\DependencyInjection\Extension.ExtensionInterface::load()
  57.      *
  58.      * @param array            $configs
  59.      * @param ContainerBuilder $container
  60.      */
  61.     public function load(array $configsContainerBuilder $container)
  62.     {
  63.         $config $this->processConfiguration(
  64.             $this->getConfiguration($configs$container),
  65.             $configs
  66.         );
  67.         if (interface_exists(MimeTypeGuesserInterface::class)) {
  68.             $mimeTypes = new Definition(MimeTypes::class);
  69.             $mimeTypes->setFactory([MimeTypes::class, 'getDefault']);
  70.             $container->setDefinition('liip_imagine.mime_types'$mimeTypes);
  71.         }
  72.         $container->setParameter('liip_imagine.resolvers'$config['resolvers']);
  73.         $container->setParameter('liip_imagine.loaders'$config['loaders']);
  74.         $this->loadResolvers($config['resolvers'], $container);
  75.         $this->loadLoaders($config['loaders'], $container);
  76.         $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
  77.         $loader->load('imagine.xml');
  78.         $loader->load('commands.xml');
  79.         if ($config['enqueue']) {
  80.             $loader->load('enqueue.xml');
  81.         }
  82.         if ($config['templating']) {
  83.             $loader->load('templating.xml');
  84.         }
  85.         $container->setParameter('liip_imagine.driver_service''liip_imagine.'.$config['driver']);
  86.         $container
  87.             ->getDefinition('liip_imagine.controller.config')
  88.             ->replaceArgument(0$config['controller']['redirect_response_code']);
  89.         $container->setAlias('liip_imagine', new Alias('liip_imagine.'.$config['driver']));
  90.         $container->setAlias(CacheManager::class, new Alias('liip_imagine.cache.manager'false));
  91.         $container->setAlias(DataManager::class, new Alias('liip_imagine.data.manager'false));
  92.         $container->setAlias(FilterManager::class, new Alias('liip_imagine.filter.manager'false));
  93.         $container->setParameter('liip_imagine.cache.resolver.default'$config['cache']);
  94.         $container->setParameter('liip_imagine.default_image'$config['default_image']);
  95.         $filterSets $this->createFilterSets($config['default_filter_set_settings'], $config['filter_sets']);
  96.         $container->setParameter('liip_imagine.filter_sets'$filterSets);
  97.         $container->setParameter('liip_imagine.binary.loader.default'$config['data_loader']);
  98.         $container->setParameter('liip_imagine.controller.filter_action'$config['controller']['filter_action']);
  99.         $container->setParameter('liip_imagine.controller.filter_runtime_action'$config['controller']['filter_runtime_action']);
  100.         $container->setParameter('twig.form.resources'array_merge(
  101.             $container->hasParameter('twig.form.resources') ? $container->getParameter('twig.form.resources') : [],
  102.             ['@LiipImagine/Form/form_div_layout.html.twig']
  103.         ));
  104.         if ($container->hasDefinition('liip_imagine.mime_types')) {
  105.             $mimeTypes $container->getDefinition('liip_imagine.mime_types');
  106.             $container->getDefinition('liip_imagine.binary.mime_type_guesser')
  107.                 ->replaceArgument(0$mimeTypes);
  108.             $container->getDefinition('liip_imagine.data.manager')
  109.                 ->replaceArgument(1$mimeTypes);
  110.         }
  111.         $this->deprecationTemplatingFilterHelper($container);
  112.     }
  113.     private function createFilterSets(array $defaultFilterSets, array $filterSets): array
  114.     {
  115.         return array_map(function (array $filterSet) use ($defaultFilterSets) {
  116.             return array_replace_recursive($defaultFilterSets$filterSet);
  117.         }, $filterSets);
  118.     }
  119.     /**
  120.      * @param array            $config
  121.      * @param ContainerBuilder $container
  122.      */
  123.     private function loadResolvers(array $configContainerBuilder $container)
  124.     {
  125.         $this->createFactories($this->resolversFactories$config$container);
  126.     }
  127.     /**
  128.      * @param array            $config
  129.      * @param ContainerBuilder $container
  130.      */
  131.     private function loadLoaders(array $configContainerBuilder $container)
  132.     {
  133.         $this->createFactories($this->loadersFactories$config$container);
  134.     }
  135.     /**
  136.      * @param array            $factories
  137.      * @param array            $configurations
  138.      * @param ContainerBuilder $container
  139.      */
  140.     private function createFactories(array $factories, array $configurationsContainerBuilder $container)
  141.     {
  142.         foreach ($configurations as $name => $conf) {
  143.             $factories[key($conf)]->create($container$name$conf[key($conf)]);
  144.         }
  145.     }
  146.     private function deprecationTemplatingFilterHelper(ContainerBuilder $container): void
  147.     {
  148.         if (!$container->hasDefinition('liip_imagine.templating.filter_helper')) {
  149.             return;
  150.         }
  151.         $message 'The "%service_id%" service is deprecated since LiipImagineBundle 2.2 and will be removed in 3.0.';
  152.         $definition $container->getDefinition('liip_imagine.templating.filter_helper');
  153.         if (method_exists(Definition::class, 'getDeprecation')) {
  154.             $definition->setDeprecated('liip/imagine-bundle''2.2'$message);
  155.         } else {
  156.             $definition->setDeprecated(true$message);
  157.         }
  158.     }
  159. }