[英]Set a Symfony2 config default value based on another config setting
使用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()
的文档说(重点是我):
该表达式接收节点的值,并且必须返回它。 它可以修改它。
因此,您可以根据需要利用此功能根据其他值实际设置默认值。
->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()
您有两种方法可以做到:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.