3

次の構成ツリーを使用します。

$rootNode
    ->fixXmlConfig('parameter')
    ->children()
        ->arrayNode('parameters')
            ->useAttributeAsKey('name')
            ->prototype('array')
                ->children()
                    ->scalarNode('type')->end()
                    ->scalarNode('value')->end()
                ->end()
            ->end()
        ->end()
    ->end();

... キーを指定しなくてもparameters、Symfony は空の配列を追加しています。

$config = $processor->processConfiguration($configuration, array());
var_dump($config); // Output is array('parameters' => array())

parametersしかし、パラメーターがない場合は、キーを設定解除して、欠席させたいと思います。

でキー (空の場合) を削除しようとしましたbeforeNormalizationが、機能しません:

$rootNode
    ->beforeNormalization()
        ->always(function ($v) {
            if(empty($v['parameters'])) {
                unset($v['parameters']);
            }

            return $v;
        })

空の配列では、正規化前のコールバックが実行されないようです。

4

3 に答える 3

0

配列ノードは、構成キーの正規化された値が常に配列であることを保証し、何も提供されていなくても (この場合は空の配列を取得します)。

構成プロセッサの返された結果でこのキーを取り除こうとする代わりに、処理が完了した後にこの構成項目 (常に配列になります) を処理する方が理にかなっていると思います。たとえば、空の場合は設定を解除できます。

$config = $processor->processConfiguration($configuration, array());
if(empty($config['parameters'])) {
    unset($config['parameters']);
}
于 2013-04-20T23:15:55.680 に答える