使用Symfony2,我知道如何使用Configuration.php文件通过config.yml设置捆绑包可用的选项。但是,我不知道如何将一个选项设置为默认值(或者这是否容易实现(。
我要找的是有一个类似这样的配置:
->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_two
,option_two
将被设置为baz
(通过与option_one
匹配的默认设置(。
对于set_three
,option_one
和option_two
都将设置为默认值peanuts
。
也许我找错地方了。。。也许在配置过程中的其他地方,"丢失"的值可能会被捕获,并根据其兄弟值(或更广泛的配置(设置为默认值?
validate()
的文档say(emphasis mine(:
表达式接收节点的值,并且必须返回它。它可以修改它。
因此,您可以利用此功能,根据需要根据其他值实际设置默认值。
->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()
有两种可能性:
- 如您在评论中指出的那样,动态修改扩展中的配置
- 使用规范化,正如这里用闭包解释的那样