使用Symfony2的Configuration类时,在配置数组中允许额外的,未定义的选项

mat*_*ndr 14 configuration symfony

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

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

这是我的配置:

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
Run Code Online (Sandbox Code Playgroud)

这是我的班级建设者:

    /**
     * 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;
    }
Run Code Online (Sandbox Code Playgroud)

我收到"InvalidConfigurationException:无法识别的选项".

Adr*_*ult 21

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

->scalarNode('service')->isRequired()->end()
->booleanNode('enabled')->defaultTrue()->end()
->variableNode('extra')->end()
Run Code Online (Sandbox Code Playgroud)

您的配置将如下所示:

acme_widget:
    handlers:
        handler_one:
            service: handler.one.service
        handler_two:
            service: handler.two.service
            extra:
                array:
                    - Extra 1
                    - Extra 2
                scalar: Extra 3
Run Code Online (Sandbox Code Playgroud)

  • `variableNode()`正是我想要的,谢谢.太糟糕了,它从symfony docs中丢失了:( (2认同)