From ea265b17a2044ec2fc71ea1997d77d03b4c4c6b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=C3=ADk=20Jan?= Date: Tue, 24 May 2022 08:26:43 +0200 Subject: [PATCH] Compiler: allow to use custom ExtensionsExtension class --- src/DI/Compiler.php | 6 +++++- tests/DI/ExtensionsExtension.basic.phpt | 13 ++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) 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']);