用作Symfony参数的非标量环境

用作Symfony参数的非标量环境,symfony,environment-variables,Symfony,Environment Variables,我正在尝试使用在Symfony2中设置参数。标量值很简单,但我有一些参数是数组,我需要用env进行设置 有关参数: parameters: redis.servers: - { host: 127.0.0.1, port: 6379 } - { host: other, port: 6379 } # and so on 这里的关键是服务器阵列可以动态变化,所以我不能仅仅假设有两个 我希望做什么(但这只是给了我一个json字符串): 这可能吗?有什么可行的解决办法吗?

我正在尝试使用在Symfony2中设置参数。标量值很简单,但我有一些参数是数组,我需要用env进行设置

有关参数:

parameters:
  redis.servers:
    - { host: 127.0.0.1, port: 6379 }
    - { host: other, port: 6379 }
    # and so on
这里的关键是服务器阵列可以动态变化,所以我不能仅仅假设有两个

我希望做什么(但这只是给了我一个json字符串):

这可能吗?有什么可行的解决办法吗?我们正在使用多个bundle来接受数组/对象参数,因此我无法在那里进行更新来处理参数。它必须是应用程序级的,如果有的话


谢谢。

我可以通过更新AppKernel来覆盖父内核的getEnvParameters()方法来解决这个问题。此方法仅在内核已经在ENV中找到的参数上运行(技术上是从$\u服务器)。我喜欢它,因为它不会在整个参数堆栈上运行,也不会在整个$\u服务器阵列上运行

protected function getEnvParameters()
{
    $parameters = parent::getEnvParameters();
    foreach ($parameters as &$parameter) {
        if (is_string($parameter)) {
            $decoded = json_decode($parameter, true);
            // we only care about arrays (or objects that get turned into arrays)
            if (!json_last_error() && is_array($decoded)) {
                $parameter = $decoded;
            }
        }
    }

    return $parameters;
}
protected function getEnvParameters()
{
    $parameters = parent::getEnvParameters();
    foreach ($parameters as &$parameter) {
        if (is_string($parameter)) {
            $decoded = json_decode($parameter, true);
            // we only care about arrays (or objects that get turned into arrays)
            if (!json_last_error() && is_array($decoded)) {
                $parameter = $decoded;
            }
        }
    }

    return $parameters;
}