php symfony在容器中设置嵌套参数

php symfony在容器中设置嵌套参数,php,symfony,Php,Symfony,在我的php symfony应用程序中,我得到了以下参数。yml: my_param: some_value my_nested: param: some_value2 //4 spaces here, need to set only this param param2: some_value3 // this should NOT be changed 我可以使用以下代码在容器中设置参数: $container->setParameter('my_param', $s

在我的php symfony应用程序中,我得到了以下
参数。yml

my_param: some_value
my_nested:
    param: some_value2 //4 spaces here, need to set only this param
    param2: some_value3 // this should NOT be changed
我可以使用以下代码在容器中设置参数:

$container->setParameter('my_param', $some_value);
它工作正常,但我需要设置嵌套参数,如下所示:

$container->setParameter('my_nested.param', $some_value);
$container->setParameter('my_nested', [
  'param' => $some_value_2,
]);

我得到一个错误,说它不能设置嵌套参数。有没有办法解决这个问题
my_nested.param2
(以及此处的其他嵌套参数)不应更改。谢谢。

您需要使用类似数组的结构,如下所示:

$container->setParameter('my_nested.param', $some_value);
$container->setParameter('my_nested', [
  'param' => $some_value_2,
]);
请看这里:

更改嵌套参数的示例如下:

$container->setParameter('my_nested', [
  'top' => [
    'nested' => 'a',
  ]
]);

$parameter = $container->getParameter('my_nested');
$parameter['top']['nested'] = 'b';

$container->setParameter('my_nested', $parameter);

您需要使用类似数组的结构,如下所示:

$container->setParameter('my_nested.param', $some_value);
$container->setParameter('my_nested', [
  'param' => $some_value_2,
]);
请看这里:

更改嵌套参数的示例如下:

$container->setParameter('my_nested', [
  'top' => [
    'nested' => 'a',
  ]
]);

$parameter = $container->getParameter('my_nested');
$parameter['top']['nested'] = 'b';

$container->setParameter('my_nested', $parameter);

您可以这样定义值:

parameters.yml:

    parameters:        
        my_param: some_value
        my_nested.param: some_value2
您可以获得描述中显示的值,但无法修改此值。 symfony将通知您以下错误:

无法对冻结的ParameterBag调用set()


您可以这样定义值:

parameters.yml:

    parameters:        
        my_param: some_value
        my_nested.param: some_value2
您可以获得描述中显示的值,但无法修改此值。 symfony将通知您以下错误:

无法对冻结的ParameterBag调用set()



第三行有多少空格?这很重要。我讨厌这个事实!对空间敏感的上下文很糟糕。4个空格,添加到问题信息中第三行有多少空格?这很重要。我讨厌这个事实!对空间敏感的上下文很糟糕。4个空格,添加到问题infoyes中,但是如果有更多的嵌套参数,我只需要设置其中的1个怎么办。不幸的是,其他的被删除了,在这种情况下,使用array\u merge和getParameter!您可以执行
getParameter('xxx')
,然后更改数组和
setParameter('xxx',$array)
我测试了您的代码,但没有办法,symfony返回错误:无法在冻结的参数包上调用set()。如果是这种情况,为什么会将其标记为正确答案?我很困惑是的,但是如果有更多的嵌套参数,而我只需要设置其中的一个呢。不幸的是,其他的被删除了,在这种情况下,使用array\u merge和getParameter!您可以执行
getParameter('xxx')
,然后更改数组和
setParameter('xxx',$array)
我测试了您的代码,但没有办法,symfony返回错误:无法在冻结的参数包上调用set()。如果是这种情况,为什么会将其标记为正确答案?我很困惑如何解冻一袋冻结的参数?我认为这是不可能的。似乎你想坚持某种永久性的修改。在这种情况下,考虑使用SESSION你如何解冻冷冻袋的参数?我认为是不可能的。看来你想坚持某种永久性修改。在这种情况下,考虑使用会话。