4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\DependencyInjection\Compiler;
14 use Symfony\Component\DependencyInjection\ContainerBuilder;
15 use Symfony\Component\DependencyInjection\Extension\ConfigurationExtensionInterface;
16 use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
19 * Merges extension configs into the container builder.
21 * @author Fabien Potencier <fabien@symfony.com>
23 class MergeExtensionConfigurationPass implements CompilerPassInterface
28 public function process(ContainerBuilder $container)
30 $parameters = $container->getParameterBag()->all();
31 $definitions = $container->getDefinitions();
32 $aliases = $container->getAliases();
33 $exprLangProviders = $container->getExpressionLanguageProviders();
35 foreach ($container->getExtensions() as $extension) {
36 if ($extension instanceof PrependExtensionInterface) {
37 $extension->prepend($container);
41 foreach ($container->getExtensions() as $name => $extension) {
42 if (!$config = $container->getExtensionConfig($name)) {
43 // this extension was not called
46 $config = $container->getParameterBag()->resolveValue($config);
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);
55 foreach ($exprLangProviders as $provider) {
56 $tmpContainer->addExpressionLanguageProvider($provider);
59 $extension->load($config, $tmpContainer);
61 $container->merge($tmpContainer);
62 $container->getParameterBag()->add($parameters);
65 $container->addDefinitions($definitions);
66 $container->addAliases($aliases);