用作 Symfony 参数的非标量 ENV
Non-scalar ENVs for use as Symfony Parameter
我正在尝试使用 ENVs 在 Symfony2 中设置我的参数。标量值很简单,但我有一些参数,这些参数是我需要用 ENV 以某种方式设置的数组。
有问题的参数:
parameters:
redis.servers:
- { host: 127.0.0.1, port: 6379 }
- { host: other, port: 6379 }
# and so on
这里的关键是服务器数组可以动态更改,所以我不能假设有 2 个。
我希望做的(但这只是给了我一串 json):
SYMFONY__REDIS__SERVERS=[{"host":"127.0.0.1","port":"6379"}]
这可能吗?任何可行的解决方法?我们正在使用多个接受 array/object 参数的包,所以我无法在那里进行更新来处理参数。如果有的话,它必须是应用程序级别。
谢谢。
我能够通过更新 AppKernel 来覆盖父内核的 getEnvParameters() 方法来解决这个问题。此方法仅 运行s 内核已经在 ENV 中找到的参数(技术上来自 $_SERVER)。我喜欢它,因为它不会 运行 整个参数堆栈,也不会整个 $_SERVER 数组。
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;
}
我正在尝试使用 ENVs 在 Symfony2 中设置我的参数。标量值很简单,但我有一些参数,这些参数是我需要用 ENV 以某种方式设置的数组。
有问题的参数:
parameters:
redis.servers:
- { host: 127.0.0.1, port: 6379 }
- { host: other, port: 6379 }
# and so on
这里的关键是服务器数组可以动态更改,所以我不能假设有 2 个。
我希望做的(但这只是给了我一串 json):
SYMFONY__REDIS__SERVERS=[{"host":"127.0.0.1","port":"6379"}]
这可能吗?任何可行的解决方法?我们正在使用多个接受 array/object 参数的包,所以我无法在那里进行更新来处理参数。如果有的话,它必须是应用程序级别。
谢谢。
我能够通过更新 AppKernel 来覆盖父内核的 getEnvParameters() 方法来解决这个问题。此方法仅 运行s 内核已经在 ENV 中找到的参数(技术上来自 $_SERVER)。我喜欢它,因为它不会 运行 整个参数堆栈,也不会整个 $_SERVER 数组。
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;
}