1

app/config/config.ymlバンドルにいくつかのカスタム設定を追加しました

acme:
    acme_services:    
      service_a:
        options: { name: I, id: X, type: F, error: E }
      service_b:
        options: { name: J, id: Z, type: F, error: E }

デフォルトを設定したり/をチェックしたりするにはsrc/ACME/Bundle/ACMEBundle/DependencyInjection/Configuration.phpどうすればよいですか?/service_aservice_b

public function getConfigTreeBuilder()
{
    $treeBuilder = new TreeBuilder();
    $rootNode = $treeBuilder->root('acme');

    $rootNode
        ->children()
            // also removed the ->end() for each arrayNode but then I get a Fatal Error 
            ->arrayNode('acme_services')->end()
            ->arrayNode('another')->end()
            ->arrayNode('more')->end()
            ->arrayNode('blah')->end()
        ->end();

    return $treeBuilder;
}

service_aしたがって、 andservice_b配列をプルする必要がありますが、 andのUnrecognized optionsエラーが発生します。service_aservice_b

望ましい結果は、配列内にservice_aとの両方を持ちたいということです。これが、またはのいずれかのサービスが使用されているかどうかを配列に対して検証できる理由です。service_bacme_servicesacme_servicesservice_aservice_b

注: PHP では、次のように記述します: (これが正しいかどうかはわかりませんが、例です)

$acme_services = array(
    'acme_services' =>
        'service_a' => array(
            'options' => array(
                'name' => 'I',
                'id'   => 'X',
                'type' => 'F',
                'error'=> 'E',
            )
        ),
        'service_b' => array(
            'options' => array(
                'name' => 'J',
                'id'   => 'Z',
                'type' => 'F',
                'error'=> 'E',
            )
        )
);
4

3 に答える 3

2

使用したいのはPrototypesで、次のようなものです。

$rootNode
    ->children()
       ->prototype('array')
          ->children()
              ->arrayNode('options')
                  ->children()
                  ->scalarNode('name')->end()
                  ->scalarNode('id')->end()
                  ->scalarNode('type')->end()
                  ->scalarNode('error')->end()
              ->end()
           ->end()
     ->end()
->end()

そうすれば、このパターンに従っている限り、必要な数のサービスを定義できます。

于 2012-08-14T18:35:12.243 に答える
1

あなたが試すことができます :

public function getConfigTreeBuilder()
{
    $treeBuilder = new TreeBuilder();
    $rootNode = $treeBuilder->root('acme');

    $rootNode
        ->children()
            // also removed the ->end() for each arrayNode but then I get a Fatal Error 
            ->arrayNode('acme_services')
                 ->children()
                      ->arrayNode('service_a')
                          ->children()
                              ->arrayNode('options')->end()
                      ->arrayNode('service_b')
                          ->children()
                              ->arrayNode('options')->end()
           ->end();

    return $treeBuilder;
}
于 2012-05-30T17:09:18.320 に答える
0

これを試して:

$rootNode
   ->children()
        ->arrayNode('acme_services')
            ->prototype('array')
                ->children()
                    ->arrayNode('options')
                        ->children()
                            ->scalarNode('name')->end()
                            ->scalarNode('id')->end()
                            ->scalarNode('type')->end()
                            ->scalarNode('error')->end()
                        ->end()
                    ->end()
                ->end()
            ->end()
        ->end()
    ->end()
->end();
于 2014-06-20T00:28:34.217 に答える