diff --git a/src/DI/Compiler.php b/src/DI/Compiler.php index c4ecfc2dc..1eb6a4fca 100644 --- a/src/DI/Compiler.php +++ b/src/DI/Compiler.php @@ -217,7 +217,11 @@ public function compile(): string /** @internal */ public function processExtensions(): void { - $first = $this->getExtensions(Extensions\ParametersExtension::class) + $this->getExtensions(Extensions\ExtensionsExtension::class); + $extensionsExtensionName = Nette\DI\Extensions\ExtensionsExtension::class; + if (array_key_exists('extensions', $this->extensions)) { + $extensionsExtensionName = get_class($this->extensions['extensions']); + } + $first = $this->getExtensions(Extensions\ParametersExtension::class) + $this->getExtensions($extensionsExtensionName); foreach ($first as $name => $extension) { $config = $this->processSchema($extension->getConfigSchema(), $this->configs[$name] ?? [], $name); $extension->setConfig($this->config[$name] = $config); diff --git a/tests/DI/ExtensionsExtension.basic.phpt b/tests/DI/ExtensionsExtension.basic.phpt index ee5409fb6..16183b0b8 100644 --- a/tests/DI/ExtensionsExtension.basic.phpt +++ b/tests/DI/ExtensionsExtension.basic.phpt @@ -51,6 +51,13 @@ class FirstExtension extends DI\CompilerExtension } } +class CustomExtensionsExtension extends DI\CompilerExtension +{ + public function loadConfiguration() + { + $this->compiler->addExtension('first', new FirstExtension); + } +} $compiler = new DI\Compiler; $compiler->addExtension('first', new FirstExtension); @@ -67,7 +74,11 @@ foo: key: value '); - Assert::same('hello', $container->parameters['foo']); Assert::same('test', $container->parameters['bar']); Assert::same(['services', 'parameters', 'first', 'extensions', 'foo', 'bar'], $container->parameters['first']); + +$compiler = new DI\Compiler; +$compiler->addExtension('extensions', new CustomExtensionsExtension); +$container = createContainer($compiler); +Assert::same(['services', 'parameters', 'extensions', 'first'], $container->parameters['first']);