【问题标题】:YAML config file in Silex Framework with dynamic replacementSilex 框架中的 YAML 配置文件,具有动态替换功能
【发布时间】:2016-06-18 01:15:02
【问题描述】:

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

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

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

【问题讨论】:

  • 据我所知 Symfony 配置组件无法以这种方式处理数据。加载后尝试进行后处理。
  • 我已经对import 进行了后期处理并合并!但我真的坚持使用 动态替换 !我有很多关于处理数据的想法: - 将配置数组复制到简单的一级数组,并在循环原始数组时使用它 - 循环并递归替换 - 循环并提取 %% 参数及其位置并进行替换 I真的不知道如何处理!
  • 我认为关于 2-nd 普通配置是个好主意。还可以尝试查看 DI 组件 DependencyInjection\ParameterBag\ParameterBag 是如何解析参数的。或者找到准备好的决定。我无法给出确切的建议。

标签: php symfony configuration yaml silex


【解决方案1】:

也许这段代码会对你有所帮助

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);

【讨论】:

    猜你喜欢
    • 2011-11-21
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 2012-09-04
    相关资源
    最近更新 更多