From 47f949307043955817ac8411a9aed6b7e6ae766e Mon Sep 17 00:00:00 2001 From: Adrien Peyre Date: Thu, 23 Jul 2026 16:25:09 +0200 Subject: [PATCH] Support config interpolation in array values Make Configuration::parse() recursive so {{ }} placeholders inside array config values (at any depth) are interpolated, not only strings. --- src/Configuration.php | 4 ++++ tests/src/Configuration/ConfigurationTest.php | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/Configuration.php b/src/Configuration.php index d0deced73..c5f3ac62e 100644 --- a/src/Configuration.php +++ b/src/Configuration.php @@ -132,6 +132,10 @@ public function parse(mixed $value): mixed return str_replace("\x00\x00", '{{', $result); } + if (is_array($value)) { + return array_map($this->parse(...), $value); + } + return $value; } diff --git a/tests/src/Configuration/ConfigurationTest.php b/tests/src/Configuration/ConfigurationTest.php index 839aadb3b..7f2df9b4a 100644 --- a/tests/src/Configuration/ConfigurationTest.php +++ b/tests/src/Configuration/ConfigurationTest.php @@ -17,6 +17,24 @@ public function testParse() self::assertEquals('a b', $config->parse('{{foo}} {{bar}}')); } + public function testParseArray() + { + $config = new Configuration(); + $config->set('foo', 'a'); + $config->set('bar', 'b'); + $config->set('list', ['{{foo}}', '{{bar}}', 'c']); + $config->set('nested', [ + 'key' => '{{foo}}', + 'deep' => ['{{bar}}', 42, null], + ]); + + self::assertEquals(['a', 'b', 'c'], $config->get('list')); + self::assertEquals([ + 'key' => 'a', + 'deep' => ['b', 42, null], + ], $config->get('nested')); + } + public function testUnset() { $config = new Configuration();