根据另一个配置设置设置Symfony2配置默认值

时间:2014-05-01 14:31:35

标签: php symfony configuration-files

使用Symfony2,我知道如何使用Configuration.php文件通过config.yml设置可用于bundle的选项。但是,我不确定如何将一个选项设置为默认为另一个选项的值(或者如果这很容易实现)。

我正在寻找的是这样的配置:

->scalarNode('option_one')
    ->defaultValue('peanuts')
    ->cannotBeEmpty()
->end()
->scalarNode('option_two')
    ->defaultValue('%option_one%')
->end()

那样:

# config.yml
my_bundle:
    set_one:
        option_one: foo
        option_two: bar
    set_two:
        option_one: baz
    set_three: ~

对于set_one,我们会将option_two设置为bar

对于set_twooption_two将设置为baz(通过默认设置将其与option_one匹配)。

对于set_threeoption_oneoption_two都将设置为默认值peanuts

也许我正在寻找错误的地方,但是......也许在配置过程中还有其他地方缺少'可以捕获值并根据其兄弟值(或更宽的配置)将其设置为默认值?

2 个答案:

答案 0 :(得分:1)

validate()的文档说(重点是我):

  

该表达式接收节点的值,必须返回它。 它可以修改它。

因此,您可以利用此功能根据需要根据其他值实际设置默认值。

->scalarNode('option_one')
    ->defaultValue('peanuts')
    ->cannotBeEmpty()
->end()
->scalarNode('option_two')
    ->defaultNull()
->end()
->validate()
  ->always(function(array $config) {
    if (!$config['option_two']) {
      $config['option_two'] = $config['option_one'];
    }
    return $config;
  })
->end()

答案 1 :(得分:0)

你有两种可能性:

  • 按照您在评论中指出的方式动态修改扩展程序中的配置。
  • 按照here说明使用闭包进行规范化播放。