Php 如何使用机器人阵列和标量原型创建配置
我有以下配置:Php 如何使用机器人阵列和标量原型创建配置,php,symfony,dependency-injection,Php,Symfony,Dependency Injection,我有以下配置: my_project: options: key1: value1 key2: value2 key3: value3 key4: [sub1, sub2, sub3, sub4] my_project: options: key1: value1 key2: value2 key3: value3 key4: [value1, val
my_project:
options:
key1: value1
key2: value2
key3: value3
key4: [sub1, sub2, sub3, sub4]
my_project:
options:
key1: value1
key2: value2
key3: value3
key4: [value1, value2, value3, value4]
key5: 123
key6:
subkey1 : [value5, value6, value7]
我的扩展不知道这些选项,我想获得一个关联数组:
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: [sub1, sub2, sub3, sub4]
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"
)
)
)
)别忘了
,
:key4:[sub1,sub2,sub3,sub4]
我想你不能验证这样的混合数组。但无论如何,它都会加载到扩展中,这样您就可以使用它,只需删除配置,就不会出现异常。