15

オブジェクトを定義しようとしてい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

これが私のクラスビルダーです:

    /**
     * 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:Unrecognizedoptions」が表示されます。

4

1 に答える 1

22

変数(何でも含めることができます)ノード「extra」を追加するだけです。

->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 に答える