comparison vendor/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 1fec387a4317
comparison
equal deleted inserted replaced
-1:000000000000 0:4c8ae668cc8c
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12 namespace Symfony\Component\DependencyInjection\Compiler;
13
14 use Symfony\Component\DependencyInjection\ContainerBuilder;
15 use Symfony\Component\DependencyInjection\Extension\ConfigurationExtensionInterface;
16 use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
17
18 /**
19 * Merges extension configs into the container builder.
20 *
21 * @author Fabien Potencier <fabien@symfony.com>
22 */
23 class MergeExtensionConfigurationPass implements CompilerPassInterface
24 {
25 /**
26 * {@inheritdoc}
27 */
28 public function process(ContainerBuilder $container)
29 {
30 $parameters = $container->getParameterBag()->all();
31 $definitions = $container->getDefinitions();
32 $aliases = $container->getAliases();
33 $exprLangProviders = $container->getExpressionLanguageProviders();
34
35 foreach ($container->getExtensions() as $extension) {
36 if ($extension instanceof PrependExtensionInterface) {
37 $extension->prepend($container);
38 }
39 }
40
41 foreach ($container->getExtensions() as $name => $extension) {
42 if (!$config = $container->getExtensionConfig($name)) {
43 // this extension was not called
44 continue;
45 }
46 $config = $container->getParameterBag()->resolveValue($config);
47
48 $tmpContainer = new ContainerBuilder($container->getParameterBag());
49 $tmpContainer->setResourceTracking($container->isTrackingResources());
50 $tmpContainer->addObjectResource($extension);
51 if ($extension instanceof ConfigurationExtensionInterface && null !== $configuration = $extension->getConfiguration($config, $tmpContainer)) {
52 $tmpContainer->addObjectResource($configuration);
53 }
54
55 foreach ($exprLangProviders as $provider) {
56 $tmpContainer->addExpressionLanguageProvider($provider);
57 }
58
59 $extension->load($config, $tmpContainer);
60
61 $container->merge($tmpContainer);
62 $container->getParameterBag()->add($parameters);
63 }
64
65 $container->addDefinitions($definitions);
66 $container->addAliases($aliases);
67 }
68 }