|
12 | 12 | namespace Symfony\Bundle\FrameworkBundle\Command;
|
13 | 13 |
|
14 | 14 | use Symfony\Component\Config\Definition\ConfigurationInterface;
|
| 15 | +use Symfony\Component\Config\Definition\Processor; |
15 | 16 | use Symfony\Component\Console\Exception\LogicException;
|
16 | 17 | use Symfony\Component\Console\Input\InputArgument;
|
17 | 18 | use Symfony\Component\Console\Input\InputInterface;
|
@@ -90,22 +91,14 @@ protected function execute(InputInterface $input, OutputInterface $output): int
|
90 | 91 | }
|
91 | 92 |
|
92 | 93 | $extension = $this->findExtension($name);
|
93 |
| - $container = $this->compileContainer(); |
94 |
| - |
95 | 94 | $extensionAlias = $extension->getAlias();
|
96 |
| - $extensionConfig = []; |
97 |
| - foreach ($container->getCompilerPassConfig()->getPasses() as $pass) { |
98 |
| - if ($pass instanceof ValidateEnvPlaceholdersPass) { |
99 |
| - $extensionConfig = $pass->getExtensionConfig(); |
100 |
| - break; |
101 |
| - } |
102 |
| - } |
103 |
| - |
104 |
| - if (!isset($extensionConfig[$extensionAlias])) { |
105 |
| - throw new \LogicException(sprintf('The extension with alias "%s" does not have configuration.', $extensionAlias)); |
106 |
| - } |
| 95 | + $container = $this->compileContainer(); |
107 | 96 |
|
108 |
| - $config = $container->resolveEnvPlaceholders($extensionConfig[$extensionAlias]); |
| 97 | + $config = $container->resolveEnvPlaceholders( |
| 98 | + $container->getParameterBag()->resolveValue( |
| 99 | + $this->getConfigForExtension($extension, $container) |
| 100 | + ) |
| 101 | + ); |
109 | 102 |
|
110 | 103 | if (null === $path = $input->getArgument('path')) {
|
111 | 104 | $io->title(
|
@@ -166,4 +159,33 @@ private function getConfigForPath(array $config, string $path, string $alias)
|
166 | 159 |
|
167 | 160 | return $config;
|
168 | 161 | }
|
| 162 | + |
| 163 | + private function getConfigForExtension(ExtensionInterface $extension, ContainerBuilder $container): array |
| 164 | + { |
| 165 | + $extensionAlias = $extension->getAlias(); |
| 166 | + |
| 167 | + $extensionConfig = []; |
| 168 | + foreach ($container->getCompilerPassConfig()->getPasses() as $pass) { |
| 169 | + if ($pass instanceof ValidateEnvPlaceholdersPass) { |
| 170 | + $extensionConfig = $pass->getExtensionConfig(); |
| 171 | + break; |
| 172 | + } |
| 173 | + } |
| 174 | + |
| 175 | + if (isset($extensionConfig[$extensionAlias])) { |
| 176 | + return $extensionConfig[$extensionAlias]; |
| 177 | + } |
| 178 | + |
| 179 | + // Fall back to default config if the extension has one |
| 180 | + |
| 181 | + if (!$extension instanceof ConfigurationExtensionInterface) { |
| 182 | + throw new \LogicException(sprintf('The extension with alias "%s" does not have configuration.', $extensionAlias)); |
| 183 | + } |
| 184 | + |
| 185 | + $configs = $container->getExtensionConfig($extensionAlias); |
| 186 | + $configuration = $extension->getConfiguration($configs, $container); |
| 187 | + $this->validateConfiguration($extension, $configuration); |
| 188 | + |
| 189 | + return (new Processor())->processConfiguration($configuration, $configs); |
| 190 | + } |
169 | 191 | }
|
0 commit comments