Silex Framework中的YAML配置文件,具有动态替换功能

时间:2016-03-04 10:31:47

标签: php symfony configuration yaml silex

我创建了一个配置提供程序,用于处理yaml文件中的silex配置。 一切都好 !偶数import功能很棒。 我唯一的问题是动态替换%%参数包围的参数。

base_path: /my/path/to/base
paths:
    web_path: %base_path%/web
    upload_path: %web_path%/uploads

我真的不知道Symfony配置组件是否可以这样处理数据。

1 个答案:

答案 0 :(得分:0)

可能这段代码会帮助你

function _flattenArray($array, &$flatten, $index = null, $path = null)
{
    if (\is_array($array)) {
        foreach ($array as $k => $v) {
            _flattenArray(
                $v,
                $flatten,
                (isset($index) ? $index . '.' : '') . $k,
                (isset($path) ? $path : '') . '[' . $k . ']'
            );
        }
    } else {
        $flatten[$index] = [
            'path' => $path,
            'value' => $array,
        ];
    }
}

$config = ...; // load config

$flatten = [];
_flattenArray($config, $flatten);

$parameterBag = [];
foreach ($flatten as $k => $v) {
    $parameterBag[$k] = $v['value'];
}

$parameterBag = new \Symfony\Component\DependencyInjection\ParameterBag\ParameterBag($parameterBag);
$parameterBag->resolve();
$parameterBag = $parameterBag->all();

$propertyAccessor = \Symfony\Component\PropertyAccess\PropertyAccess::createPropertyAccessor();
foreach ($parameterBag as $k => $v) {
    if ($v === $flatten[$k]['value']) continue;
    $propertyAccessor->setValue($config, $flatten[$k]['path'], $v);
}

dump($config);