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

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\Definition\Exception\InvalidConfigurationException;
  17. use Symfony\Component\Config\FileLocator;
  18. use Symfony\Component\DependencyInjection\Alias;
  19. use Symfony\Component\DependencyInjection\ContainerBuilder;
  20. use Symfony\Component\DependencyInjection\Definition;
  21. use Symfony\Component\DependencyInjection\Exception\LogicException;
  22. use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
  23. use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
  24. use Symfony\Component\HttpKernel\DependencyInjection\Extension;
  25. use Symfony\Component\Messenger\MessageBusInterface;
  26. use Symfony\Component\Mime\MimeTypeGuesserInterface;
  27. use Symfony\Component\Mime\MimeTypes;
  28. class LiipImagineExtension extends Extension implements PrependExtensionInterface
  29. {
  30.     /**
  31.      * @var ResolverFactoryInterface[]
  32.      */
  33.     private $resolversFactories = [];
  34.     /**
  35.      * @var LoaderFactoryInterface[]
  36.      */
  37.     private $loadersFactories = [];
  38.     public function addResolverFactory(ResolverFactoryInterface $resolverFactory)
  39.     {
  40.         $this->resolversFactories[$resolverFactory->getName()] = $resolverFactory;
  41.     }
  42.     public function addLoaderFactory(LoaderFactoryInterface $loaderFactory)
  43.     {
  44.         $this->loadersFactories[$loaderFactory->getName()] = $loaderFactory;
  45.     }
  46.     /**
  47.      * {@inheritdoc}
  48.      */
  49.     public function getConfiguration(array $configContainerBuilder $container)
  50.     {
  51.         return new Configuration($this->resolversFactories$this->loadersFactories);
  52.     }
  53.     /**
  54.      * @see \Symfony\Component\DependencyInjection\Extension.ExtensionInterface::load()
  55.      */
  56.     public function load(array $configsContainerBuilder $container)
  57.     {
  58.         $config $this->processConfiguration(
  59.             $this->getConfiguration($configs$container),
  60.             $configs
  61.         );
  62.         if (interface_exists(MimeTypeGuesserInterface::class)) {
  63.             $mimeTypes = new Definition(MimeTypes::class);
  64.             $mimeTypes->setFactory([MimeTypes::class, 'getDefault']);
  65.             $container->setDefinition('liip_imagine.mime_types'$mimeTypes);
  66.         }
  67.         $container->setParameter('liip_imagine.resolvers'$config['resolvers']);
  68.         $container->setParameter('liip_imagine.loaders'$config['loaders']);
  69.         $this->loadResolvers($config['resolvers'], $container);
  70.         $this->loadLoaders($config['loaders'], $container);
  71.         $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
  72.         $loader->load('imagine.xml');
  73.         if ('none' !== $config['twig']['mode']) {
  74.             $this->loadTwig($config['twig'], $loader$container);
  75.         }
  76.         $loader->load('commands.xml');
  77.         if ($this->isConfigEnabled($container$config['messenger'])) {
  78.             $this->registerMessengerConfiguration($loader);
  79.         }
  80.         if ($config['enqueue']) {
  81.             $loader->load('enqueue.xml');
  82.         }
  83.         if ($config['templating']) {
  84.             $loader->load('templating.xml');
  85.         }
  86.         $container->setParameter('liip_imagine.driver_service''liip_imagine.'.$config['driver']);
  87.         $container
  88.             ->getDefinition('liip_imagine.controller.config')
  89.             ->replaceArgument(0$config['controller']['redirect_response_code']);
  90.         $container->setAlias('liip_imagine', new Alias('liip_imagine.'.$config['driver']));
  91.         $container->setAlias(CacheManager::class, new Alias('liip_imagine.cache.manager'false));
  92.         $container->setAlias(DataManager::class, new Alias('liip_imagine.data.manager'false));
  93.         $container->setAlias(FilterManager::class, new Alias('liip_imagine.filter.manager'false));
  94.         $container->setParameter('liip_imagine.cache.resolver.default'$config['cache']);
  95.         $container->setParameter('liip_imagine.default_image'$config['default_image']);
  96.         $filterSets $this->createFilterSets($config['default_filter_set_settings'], $config['filter_sets']);
  97.         $container->setParameter('liip_imagine.filter_sets'$filterSets);
  98.         $container->setParameter('liip_imagine.binary.loader.default'$config['data_loader']);
  99.         $container->setParameter('liip_imagine.controller.filter_action'$config['controller']['filter_action']);
  100.         $container->setParameter('liip_imagine.controller.filter_runtime_action'$config['controller']['filter_runtime_action']);
  101.         if ($container->hasDefinition('liip_imagine.mime_types')) {
  102.             $mimeTypes $container->getDefinition('liip_imagine.mime_types');
  103.             $container->getDefinition('liip_imagine.binary.mime_type_guesser')
  104.                 ->replaceArgument(0$mimeTypes);
  105.             $container->getDefinition('liip_imagine.data.manager')
  106.                 ->replaceArgument(1$mimeTypes);
  107.         }
  108.         $this->deprecationTemplatingFilterHelper($container);
  109.         $container->setParameter('liip_imagine.webp.generate'$config['webp']['generate']);
  110.         $webpOptions $config['webp'];
  111.         unset($webpOptions['generate']);
  112.         $container->setParameter('liip_imagine.webp.options'$webpOptions);
  113.     }
  114.     public function prepend(ContainerBuilder $container): void
  115.     {
  116.         if ($container->hasExtension('twig')) {
  117.             $container->prependExtensionConfig('twig', ['form_themes' => ['@LiipImagine/Form/form_div_layout.html.twig']]);
  118.         }
  119.     }
  120.     private function createFilterSets(array $defaultFilterSets, array $filterSets): array
  121.     {
  122.         return array_map(function (array $filterSet) use ($defaultFilterSets) {
  123.             return array_replace_recursive($defaultFilterSets$filterSet);
  124.         }, $filterSets);
  125.     }
  126.     private function loadResolvers(array $configContainerBuilder $container)
  127.     {
  128.         $this->createFactories($this->resolversFactories$config$container);
  129.     }
  130.     private function loadLoaders(array $configContainerBuilder $container)
  131.     {
  132.         $this->createFactories($this->loadersFactories$config$container);
  133.     }
  134.     private function createFactories(array $factories, array $configurationsContainerBuilder $container)
  135.     {
  136.         foreach ($configurations as $name => $conf) {
  137.             $factories[key($conf)]->create($container$name$conf[key($conf)]);
  138.         }
  139.     }
  140.     private function registerMessengerConfiguration(XmlFileLoader $loader): void
  141.     {
  142.         if (!interface_exists(MessageBusInterface::class)) {
  143.             throw new LogicException('Messenger support cannot be enabled as the Messenger component is not installed. Try running "composer require symfony/messenger".');
  144.         }
  145.         $loader->load('messenger.xml');
  146.     }
  147.     private function deprecationTemplatingFilterHelper(ContainerBuilder $container): void
  148.     {
  149.         if (!$container->hasDefinition('liip_imagine.templating.filter_helper')) {
  150.             return;
  151.         }
  152.         $message 'The "%service_id%" service is deprecated since LiipImagineBundle 2.2 and will be removed in 3.0.';
  153.         $definition $container->getDefinition('liip_imagine.templating.filter_helper');
  154.         if (method_exists(Definition::class, 'getDeprecation')) {
  155.             $definition->setDeprecated('liip/imagine-bundle''2.2'$message);
  156.         } else {
  157.             $definition->setDeprecated(true$message);
  158.         }
  159.     }
  160.     private function loadTwig(array $configXmlFileLoader $loaderContainerBuilder $container): void
  161.     {
  162.         if ('legacy' === $config['mode']) {
  163.             $loader->load('imagine_twig_mode_legacy.xml');
  164.             return;
  165.         }
  166.         if ('lazy' === $config['mode']) {
  167.             $loader->load('imagine_twig_mode_lazy.xml');
  168.             if (\array_key_exists('assets_version'$config) && null !== $config['assets_version']) {
  169.                 $runtime $container->getDefinition('liip_imagine.templating.filter_runtime');
  170.                 $runtime->setArgument(1$config['assets_version']);
  171.             }
  172.             return;
  173.         }
  174.         throw new InvalidConfigurationException('Unexpected twig mode '.$config['mode']);
  175.     }
  176. }