繁体   English   中英

根据其他配置设置设置Symfony2配置默认值

[英]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_twooption_two将被设置为baz (经由它匹配它的默认设置option_one )。

而对于set_three ,既option_oneoption_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM