35 lines
1.0 KiB
PHP
35 lines
1.0 KiB
PHP
<?php
|
|
namespace Consolidation\Config\Util;
|
|
|
|
/**
|
|
* Works like 'getWithFallback', but merges results from all applicable
|
|
* groups. Settings from most specific group take precedence.
|
|
*/
|
|
class ConfigMerge extends ConfigGroup
|
|
{
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function get($key)
|
|
{
|
|
return $this->getWithMerge($key, $this->group, $this->prefix, $this->postfix);
|
|
}
|
|
|
|
/**
|
|
* Merge available configuration from each configuration group.
|
|
*/
|
|
public function getWithMerge($key, $group, $prefix = '', $postfix = '.')
|
|
{
|
|
$configKey = "{$prefix}{$group}${postfix}{$key}";
|
|
$result = $this->config->get($configKey, []);
|
|
if (!is_array($result)) {
|
|
throw new \UnexpectedValueException($configKey . ' must be a list of settings to apply.');
|
|
}
|
|
$moreGeneralGroupname = $this->moreGeneralGroupName($group);
|
|
if ($moreGeneralGroupname) {
|
|
$result += $this->getWithMerge($key, $moreGeneralGroupname, $prefix, $postfix);
|
|
}
|
|
return $result;
|
|
}
|
|
}
|