2017-05-16 3 views
0

バンドルの設定を設定していますが、私はConfigurationクラスを使用しています。私はlist子を持っているmy_nodeノードを持っていて、デフォルト値を設定したいと思います。配列ノードのデフォルト値としてのパラメータの使用

パラメータから値を設定したいということです。パラメータ名がdefaultValueであればInvalidArgumentExceptionthe default value of an array node has to be an arrayとスローします。

->arrayNode(‘my_node’) 
    ->children() 
     ->arrayNode('list') 
      ->prototype('scalar')->end() 
      ->defaultValue([‘foo’, ‘bar’]) //this works 
      ->defaultValue(‘%some_parameter%’) //this does not 
     ->end() 
    ->end() 
->end() 

どのようにすれば達成できますか?

答えて

1

ノードをノードとして定義するとき、defaultValue()は値が配列であることをアサートします。この段階(構成ツリーの構築)では、パラメーターの概念はないため、値は解決されず、構成ビルダのスカラー文字列として認識されます。

これを回避するには、デフォルト値をnullに設定できます。コンテナ拡張クラスでは、config配列を読み込んでコンテナをコンフィグレーションするときに、null値をパラメータに置き換えることができます。このパラメータは、後でコンテナのコンパイル時に解決されます。

+0

エクステンションはコンテナビルダオブジェクトにアクセスできます。つまり、パラメータをプルアウトして設定オブジェクトに渡すことができます。しかし、私はそれがコンフィギュレーションシステムの目的を打ち負かしていると思います。 – Cerad

+0

@ Kerad、パラメータ値をプルする必要はありません。後で解決されます。 – Gerry

+1

真実ですが、基本的には、nullをチェックしてから、後でそのサイクルでパラメータを行う必要があります。しかし、私の主なポイントは、パラメタのデフォルト値が必要ないことです。ツリービルダにデフォルト値を設定しておき、ユーザが選択した場合はconfig.ymlでその値を上書きすることができます。もちろん、ユースケースを完全に誤解している可能性があります。 – Cerad

関連する問題