【问题标题】:Nested prototypes in Symfony2 ConfigurationSymfony2 配置中的嵌套原型
【发布时间】:2012-12-02 05:26:40
【问题描述】:

使用 Symfony2 TreeBuilder,可以为数组节点内的每个节点配置原型,例如支持类似的配置

foo:
    xxx: { foo: bar}
    yyy: { foo: bar}

其中有任意数量的 xxx、yyy 等(任何值)节点,使用类似的结构

$rootNode
    ->arrayNode('foo')
    ->prototype('array')
        ->children()
            ->scalarNode('foo')

我想在不引入另一个命名节点的情况下创建同一事物的另一个级别,例如支持像

这样的配置
foo:
    xxx:
        aaa: { foo: bar}
        bbb: { foo: bar}
    yyy:
        ccc: { foo: bar}
        ddd: { foo: bar}

这里可以有任意数量的xxx、yyy等节点,每个节点可以包含任意数量的其他aaa、bbb等节点。

有什么方法可以实现吗?在另一个原型调用的->children() 下直接调用->prototype() 不起作用,因为原型似乎不支持嵌套原型。结果,我不得不硬编码 xxx 和 yyy 的特定值,限制了我正在编写的包的灵活性。

【问题讨论】:

    标签: symfony configuration yaml


    【解决方案1】:

    在 symfony 2.2 中检查,嵌套工作。

    不要在嵌套的->prototype()之间使用->children()

    $rootNode->children()
       ->arrayNode('foo')
          ->prototype('array')
             ->prototype('array')
                 ->children()
                    ->scalarNode('foo');
    

    【讨论】:

    • 你知道为什么在这种情况下必须不使用儿童吗?刚刚也偶然发现了这个问题,在这种情况下使用儿童似乎是一致的。
    • @k0pernikus 我想是因为原型意味着任何数量的元素。
    猜你喜欢
    • 2013-05-05
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多