Symfony 4:如何在捆绑包配置中为数组节点允许动态值?

问题描述 投票:0回答:1

例如,在我包的Configuration中,我定义了以下内容:

$treeBuilder = new TreeBuilder('foo');
$treeBuilder
    ->getRootNode()
    ->children()
        ->arrayNode('foobar')
            ->scalarPrototype()->end()
            ->defaultValue([])
        ->end()
    ->end()
;

i。例如,捆绑销售商品需要foo.foobar中的值数组。现在,对于我的捆绑软件而言,这些值取决于运行应用程序的环境。因此,通过环境变量提供此配置值将是有意义的。可以处理环境变量的Since Symfony 3.4值。因此,可以将该数组存储为JSON编码并存储在环境变量中,然后通过%env(json:FOO)%对其进行解码。因此,不必写

foo:
    foobar:
        - Lorem
        - Ipsum
        - Dolor

一个人可以使用

foo:
    foobar: '%env(json:FOO)%'

where

FOO=["Lorem","Ipsum","Dolor"]

但是,当尝试这样做时,Symfony抛出以下异常:

A dynamic value is not compatible with a "Symfony\Component\Config\Definition\PrototypedArrayNode" node type at path "foo.foobar".

为数组节点允许这种动态值的正确方法是什么?例如,我需要在配置树中实现自己的规范化吗?

php symfony symfony4
1个回答
0
投票

您需要在.env文件中将JSON定义为string

这是正确的:FOO='["Lorem","Ipsum","Dolor"]'

© www.soinside.com 2019 - 2024. All rights reserved.