如何创建具有bot数组和标量原型的配置


How to create a configuration with bot array and scalar prototypes

我有以下配置:

my_project:
    options:
        key1: value1
        key2: value2
        key3: value3
        key4: [sub1, sub2, sub3, sub4]

这些选项是不知道我的扩展,我想得到一个关联数组:

array(
    "key1"=>"value1",
    "key"=>"value2",
    "key3"=>"value3",
    "key4"=>array("sub1","sub2","sub3","sub4") 
);

我的树看起来像:

$rootNode
    ->addDefaultsIfNotSet()
    ->children()
        ->arrayNode('options')
            ->useAttributeAsKey('key')
            ->treatNullLike(array())
            ->prototype('scalar')->end()
        ->end()
    ->end();

问题是,键/值"key4"我有一个异常(这是正常的原型是'array')。

所以我的问题是:我怎么能混合标量和数组选项?

谢谢@lackovic的帮助!

这是我的解决方案:

public function load(array $configs, ContainerBuilder $container)
{
    $processor     = new Processor();
    $configuration = new Configuration($this->getAlias());
    $options = array();
    if(isset($configs[0]['options']))
    {
        $options = $configs[0]['options'];
        unset($configs[0]['options']);
    }
    $config = $processor->processConfiguration($configuration, $configs);

    // Now $options contains all the options and $config the configuration of my bundle
    ...
}

此解决方案还有助于包含配置的子级别:

my_project:
    options:
        key1: value1
        key2: value2
        key3: value3
        key4: [value1, value2, value3, value4]
        key5: 123
        key6: 
            subkey1 : [value5, value6, value7]

返回:

array
(
    "key1" => "value1"
    "key2" => "value2"
    "key3" => "value3"
    "key4" => array(
            0 => "value1"
            1 => "value2"
            2 => "value3"
            3 => "value4"
    )
    "key5" => 123
    "key6" => array(
        "value1" => array(
            0 => "value2"
            1 => "value3"
            2 => "value4"
        )
    )
)

)