Skip to content

Commit 0dcff1f

Browse files
committed
resolve merge directives in new nested config subtrees
1 parent 3a4ccdb commit 0dcff1f

2 files changed

Lines changed: 16 additions & 2 deletions

File tree

system/Config/BaseConfig.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -435,8 +435,11 @@ private function mergeByKey(array $current, array $incoming): array
435435
}
436436
} elseif (is_int($key)) {
437437
$current[] = $value;
438-
} elseif (isset($current[$key]) && is_array($current[$key]) && is_array($value)) {
439-
$current[$key] = $this->mergeByKey($current[$key], $value);
438+
} elseif (is_array($value)) {
439+
$current[$key] = $this->mergeByKey(
440+
isset($current[$key]) && is_array($current[$key]) ? $current[$key] : [],
441+
$value,
442+
);
440443
} else {
441444
$current[$key] = $value;
442445
}

tests/system/Config/MergeTest.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,17 @@ public function testByKeyResolvesBrandNewNestedArraySubtree(): void
340340
$this->assertSame(['deep' => ['nested' => ['value']]], $result);
341341
}
342342

343+
public function testByKeyResolvesDirectiveInsideBrandNewNestedArraySubtree(): void
344+
{
345+
$result = $this->apply([], Merge::byKey([
346+
'globals' => [
347+
'before' => Merge::append(['auth']),
348+
],
349+
]));
350+
351+
$this->assertSame(['globals' => ['before' => ['auth']]], $result);
352+
}
353+
343354
public function testAppendPayloadIsTerminalLiteral(): void
344355
{
345356
// A directive embedded in an append() payload is literal data, not interpreted.

0 commit comments

Comments
 (0)