【问题标题】:Using Parameter as a default value for array node使用参数作为数组节点的默认值
【发布时间】:2017-05-16 11:26:23
【问题描述】:

我正在设置 bundle 的配置,我正在使用 Configuration 类。我有 my_node 节点,它有一个 list 子节点,我想为它设置一个默认值。

事情是我想从参数中设置值。当我尝试使用参数名称调用defaultValue 时,它会抛出InvalidArgumentExceptionthe default value of an array node has to be an array

->arrayNode(‘my_node’)
    ->children()
        ->arrayNode('list')
            ->prototype('scalar')->end()
            ->defaultValue([‘foo’, ‘bar’])   //this works
            ->defaultValue(‘%some_parameter%’)  //this does not
        ->end()
     ->end()
->end()

有什么想法可以实现吗?

【问题讨论】:

    标签: php symfony configuration


    【解决方案1】:

    当您将节点定义为数组节点时,defaultValue() 将断言该值是一个数组。在这个阶段(构建配置树),没有参数的概念,因此该值不会被解析,而是被视为配置构建器的标量字符串。

    要解决此问题,您可以将默认值设置为 null。在您的容器扩展类中,当您读取配置数组并使用它配置容器时,您可以将 null 值替换为参数,稍后将在容器编译时解决。

    【讨论】:

    • 您的扩展确实可以访问容器构建器对象,这意味着您可以将参数拉出,然后将其传递给配置对象。但我认为这有悖于配置系统的目的。
    • @Cerad,参数值不用拉,后面会解决。
    • 是的,但基本上这意味着您必须检查空值,然后在周期的稍后部分执行您的参数操作。但我想我的主要观点是我认为不需要参数默认值。默认值应该在树构建器中设置,然后用户可以在 config.yml 中覆盖它,如果他们选择的话。当然,我可能完全误解了用例。
    猜你喜欢
    • 2012-12-23
    • 2012-08-01
    • 2011-10-28
    • 2014-04-19
    • 2010-10-03
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多