• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

liip / LiipImagineBundle / 18496332551

14 Oct 2025 12:21PM UTC coverage: 81.656% (+0.007%) from 81.649%
18496332551

Pull #1637

github

web-flow
Merge f966bc9d7 into 079e74383
Pull Request #1637: Start moving Symfony DI config from XML to PHP format

3 of 6 new or added lines in 1 file covered. (50.0%)

12 existing lines in 1 file now uncovered.

2288 of 2802 relevant lines covered (81.66%)

103.35 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

80.65
/DependencyInjection/LiipImagineExtension.php
1
<?php
2

3
/*
4
 * This file is part of the `liip/LiipImagineBundle` project.
5
 *
6
 * (c) https://github.com/liip/LiipImagineBundle/graphs/contributors
7
 *
8
 * For the full copyright and license information, please view the LICENSE.md
9
 * file that was distributed with this source code.
10
 */
11

12
namespace Liip\ImagineBundle\DependencyInjection;
13

14
use Imagine\Vips\Imagine;
15
use Liip\ImagineBundle\DependencyInjection\Factory\Loader\LoaderFactoryInterface;
16
use Liip\ImagineBundle\DependencyInjection\Factory\Resolver\ResolverFactoryInterface;
17
use Liip\ImagineBundle\Imagine\Cache\CacheManager;
18
use Liip\ImagineBundle\Imagine\Data\DataManager;
19
use Liip\ImagineBundle\Imagine\Filter\FilterManager;
20
use Symfony\Component\Config\Definition\ConfigurationInterface;
21
use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
22
use Symfony\Component\Config\FileLocator;
23
use Symfony\Component\Config\Loader\LoaderInterface;
24
use Symfony\Component\DependencyInjection\Alias;
25
use Symfony\Component\DependencyInjection\ContainerBuilder;
26
use Symfony\Component\DependencyInjection\Definition;
27
use Symfony\Component\DependencyInjection\Exception\LogicException;
28
use Symfony\Component\DependencyInjection\Extension\Extension;
29
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
30
use Symfony\Component\DependencyInjection\Loader\PhpFileLoader;
31
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
32
use Symfony\Component\Messenger\MessageBusInterface;
33
use Symfony\Component\Mime\MimeTypeGuesserInterface;
34
use Symfony\Component\Mime\MimeTypes;
35

36
class LiipImagineExtension extends Extension implements PrependExtensionInterface
37
{
38
    /**
39
     * @var ResolverFactoryInterface[]
40
     */
41
    private $resolversFactories = [];
42

43
    /**
44
     * @var LoaderFactoryInterface[]
45
     */
46
    private $loadersFactories = [];
47

48
    public function addResolverFactory(ResolverFactoryInterface $resolverFactory)
49
    {
50
        $this->resolversFactories[$resolverFactory->getName()] = $resolverFactory;
104✔
51
    }
40✔
52

53
    public function addLoaderFactory(LoaderFactoryInterface $loaderFactory)
54
    {
55
        $this->loadersFactories[$loaderFactory->getName()] = $loaderFactory;
104✔
56
    }
40✔
57

58
    public function getConfiguration(array $config, ContainerBuilder $container): ?ConfigurationInterface
59
    {
60
        return new Configuration($this->resolversFactories, $this->loadersFactories);
117✔
61
    }
62

63
    /**
64
     * @see \Symfony\Component\DependencyInjection\Extension.ExtensionInterface::load()
65
     */
66
    public function load(array $configs, ContainerBuilder $container): void
67
    {
68
        $config = $this->processConfiguration(
117✔
69
            $this->getConfiguration($configs, $container),
117✔
70
            $configs
99✔
71
        );
72✔
72

73
        if (interface_exists(MimeTypeGuesserInterface::class)) {
104✔
74
            $mimeTypes = new Definition(MimeTypes::class);
104✔
75
            $mimeTypes->setFactory([MimeTypes::class, 'getDefault']);
104✔
76

77
            $container->setDefinition('liip_imagine.mime_types', $mimeTypes);
104✔
78
        }
79

80
        $container->setParameter('liip_imagine.resolvers', $config['resolvers']);
104✔
81
        $container->setParameter('liip_imagine.loaders', $config['loaders']);
104✔
82

83
        $this->loadResolvers($config['resolvers'], $container);
104✔
84
        $this->loadLoaders($config['loaders'], $container);
104✔
85

86
        $phpLoader = new PhpFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
104✔
87
        $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
104✔
88
        $loader->load('imagine.xml');
104✔
89

90
        if ('none' !== $config['twig']['mode']) {
104✔
91
            $this->loadTwig($config['twig'], $loader, $container);
104✔
92
        }
93

94
        $phpLoader->load('commands.php');
104✔
95

96
        if ($this->isConfigEnabled($container, $config['messenger'])) {
104✔
NEW
97
            $this->registerMessengerConfiguration($phpLoader);
×
98
        }
99

100
        if ($config['enqueue']) {
104✔
NEW
101
            $phpLoader->load('enqueue.php');
×
102
        }
103

104
        if ($config['templating']) {
104✔
105
            $phpLoader->load('templating.php');
91✔
106
        }
107

108
        $driver = $config['driver'];
104✔
109
        if ('vips' === $driver) {
104✔
110
            if (!class_exists(Imagine::class)) {
×
111
                $vipsImagineClass = Imagine::class;
×
112

113
                throw new \RuntimeException("Unable to use 'vips' driver without '{$vipsImagineClass}' class.");
×
114
            }
115

116
            $loader->load('imagine_vips.xml');
×
117
        }
118

119
        $container->setParameter('liip_imagine.driver_service', "liip_imagine.{$driver}");
104✔
120

121
        $container
64✔
122
            ->getDefinition('liip_imagine.controller.config')
104✔
123
            ->replaceArgument(0, $config['controller']['redirect_response_code']);
104✔
124

125
        $container->setAlias('liip_imagine', new Alias("liip_imagine.{$driver}"));
104✔
126
        $container->setAlias(CacheManager::class, new Alias('liip_imagine.cache.manager', false));
104✔
127
        $container->setAlias(DataManager::class, new Alias('liip_imagine.data.manager', false));
104✔
128
        $container->setAlias(FilterManager::class, new Alias('liip_imagine.filter.manager', false));
104✔
129

130
        $container->setParameter('liip_imagine.cache.resolver.default', $config['cache']);
104✔
131

132
        $container->setParameter('liip_imagine.default_image', $config['default_image']);
104✔
133

134
        $filterSets = $this->createFilterSets($config['default_filter_set_settings'], $config['filter_sets']);
104✔
135

136
        $container->setParameter('liip_imagine.filter_sets', $filterSets);
104✔
137
        $container->setParameter('liip_imagine.binary.loader.default', $config['data_loader']);
104✔
138

139
        $container->setParameter('liip_imagine.controller.filter_action', $config['controller']['filter_action']);
104✔
140
        $container->setParameter('liip_imagine.controller.filter_runtime_action', $config['controller']['filter_runtime_action']);
104✔
141

142
        if ($container->hasDefinition('liip_imagine.mime_types')) {
104✔
143
            $mimeTypes = $container->getDefinition('liip_imagine.mime_types');
104✔
144
            $container->getDefinition('liip_imagine.binary.mime_type_guesser')
104✔
145
                ->replaceArgument(0, $mimeTypes);
104✔
146

147
            $container->getDefinition('liip_imagine.data.manager')
104✔
148
                ->replaceArgument(1, $mimeTypes);
104✔
149
        }
150

151
        $this->deprecationTemplatingFilterHelper($container);
104✔
152

153
        $container->setParameter('liip_imagine.webp.generate', $config['webp']['generate']);
104✔
154
        $webpOptions = $config['webp'];
104✔
155
        unset($webpOptions['generate']);
104✔
156
        $container->setParameter('liip_imagine.webp.options', $webpOptions);
104✔
157
    }
40✔
158

159
    public function prepend(ContainerBuilder $container): void
160
    {
UNCOV
161
        if ($container->hasExtension('twig')) {
×
UNCOV
162
            $container->prependExtensionConfig('twig', ['form_themes' => ['@LiipImagine/Form/form_div_layout.html.twig']]);
×
163
        }
164
    }
165

166
    private function createFilterSets(array $defaultFilterSets, array $filterSets): array
167
    {
168
        return array_map(function (array $filterSet) use ($defaultFilterSets) {
64✔
169
            return array_replace_recursive($defaultFilterSets, $filterSet);
26✔
170
        }, $filterSets);
104✔
171
    }
172

173
    private function loadResolvers(array $config, ContainerBuilder $container)
174
    {
175
        $this->createFactories($this->resolversFactories, $config, $container);
104✔
176
    }
40✔
177

178
    private function loadLoaders(array $config, ContainerBuilder $container)
179
    {
180
        $this->createFactories($this->loadersFactories, $config, $container);
104✔
181
    }
40✔
182

183
    private function createFactories(array $factories, array $configurations, ContainerBuilder $container)
184
    {
185
        foreach ($configurations as $name => $conf) {
104✔
186
            $factories[key($conf)]->create($container, $name, $conf[key($conf)]);
104✔
187
        }
188
    }
40✔
189

190
    private function registerMessengerConfiguration(LoaderInterface $loader): void
191
    {
UNCOV
192
        if (!interface_exists(MessageBusInterface::class)) {
×
UNCOV
193
            throw new LogicException('Messenger support cannot be enabled as the Messenger component is not installed. Try running "composer require symfony/messenger".');
×
194
        }
195

NEW
UNCOV
196
        $loader->load('messenger.php');
×
197
    }
198

199
    private function deprecationTemplatingFilterHelper(ContainerBuilder $container): void
200
    {
201
        if (!$container->hasDefinition('liip_imagine.templating.filter_helper')) {
104✔
202
            return;
13✔
203
        }
204

205
        $message = 'The "%service_id%" service is deprecated since LiipImagineBundle 2.2 and will be removed in 3.0.';
91✔
206
        $definition = $container->getDefinition('liip_imagine.templating.filter_helper');
91✔
207

208
        $definition->setDeprecated('liip/imagine-bundle', '2.2', $message);
91✔
209
    }
35✔
210

211
    private function loadTwig(array $config, XmlFileLoader $loader, ContainerBuilder $container): void
212
    {
213
        if ('legacy' === $config['mode']) {
104✔
214
            $loader->load('imagine_twig_mode_legacy.xml');
104✔
215

216
            return;
104✔
217
        }
218

UNCOV
219
        if ('lazy' === $config['mode']) {
×
UNCOV
220
            $loader->load('imagine_twig_mode_lazy.xml');
×
UNCOV
221
            if (\array_key_exists('assets_version', $config) && null !== $config['assets_version']) {
×
UNCOV
222
                $runtime = $container->getDefinition('liip_imagine.templating.filter_runtime');
×
UNCOV
223
                $runtime->setArgument(1, $config['assets_version']);
×
224
            }
225

UNCOV
226
            return;
×
227
        }
228

UNCOV
229
        throw new InvalidConfigurationException('Unexpected twig mode '.$config['mode']);
×
230
    }
231
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc