15

我正在尝试定义一个Configuration对象。我已经成功定义了一个数组原型节点(如security.firewalls)。我的原型数组有一个必需的元素,但如果需要,我想允许将任意参数添加到每个数组中。

我的问题是,如何允许将额外的未定义元素添加到每个原型数组中?

这是我的配置:

acme_widget:
    handlers:
        handler_one:
            service: handler.one.service
        handler_two:
            service: handler.two.service
            extra_array:
                - Extra 1
                - Extra 2
            extra_scalar: Extra 3

这是我的班级建设者:

    /**
     * Generates the configuration tree.
     *
     * @return TreeBuilder
     */
    public function getConfigTreeBuilder()
    {
        $treeBuilder = new TreeBuilder;
        $rootNode = $treeBuilder->root('acme_widget');

        $rootNode
            ->children()
                ->arrayNode('handlers')
                    ->useAttributeAsKey('service')
                    ->prototype('array')
                        ->children()
                            ->scalarNode('service')->isRequired()->end()
                            ->booleanNode('enabled')->defaultTrue()->end()
                        ->end()
                    ->end()
                ->end()
            ->end()
        ;

        return $treeBuilder;
    }

我收到“InvalidConfigurationException:无法识别的选项”。

4

1 回答 1

22

我只想添加一个变量(可以包含任何东西)节点“额外”:

->scalarNode('service')->isRequired()->end()
->booleanNode('enabled')->defaultTrue()->end()
->variableNode('extra')->end()

您的配置将如下所示:

acme_widget:
    handlers:
        handler_one:
            service: handler.one.service
        handler_two:
            service: handler.two.service
            extra:
                array:
                    - Extra 1
                    - Extra 2
                scalar: Extra 3
于 2012-09-23T10:07:36.250 回答