我想配置一个包以允许不同公司的不同行为。其中的配置结构将是相同的。
我的config.yml
应如下所示:
bunde_namespace:
company:
company_1:
foo: bar
baz: poit
company_2:
foo: bar
baz: poit
company_3:
...
当我访问$config
时,我希望数组看起来像这样:
$config['company'] = [
'company_one' => [
'foo' => 'bar'
'baz' => 'poit'
],
'company_two' => [
'foo' => 'bar'
'baz' => 'poit'
],
...
];
然而,我没有使用TreeBuilder和setting up the configuration as described in the docs的经验,但我仍然没有想到我如何设置配置,以便将company
的孩子视为键控数组。
到目前为止,我所做的是为一家公司设置配置,如下所示:
class Configuration implements ConfigurationInterface
{
/**
* {@inheritdoc}
*/
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('dreamlines_booking_service_fibos');
$rootNode
->children()
->arrayNode('company')
->children()
->scalarNode('foo')->end()
->scalarNode('baz')->end()
->end()
->end()
->end();
return $treeBuilder;
}
}
简化的config.yml
看起来像这样:
bundle_namespace:
company:
foo: bar
baz: poit
然而,这不是我想要的。
我假设我需要使用useAttributeAsKey
,但我无法正常工作。
这失败了:
$rootNode
->children()
->arrayNode('company')
->prototype('array')
->useAttributeAsKey('name')
->children()
->scalarNode('foo')->end()
->scalarNode('baz')->end()
->end()
->end()
->end()
->end();
说明:
[Symfony的\元器件\配置\定义\异常\ InvalidDefinitionException] - > useAttributeAsKey()不适用于路径“bundle_namespace”的具体节点。
我哪里错了?
答案 0 :(得分:2)
当您尝试在原型上应用# Ignore application configuration
/config/application.yml
时会导致错误,但由于该方法属于ArrayNodeDefinition,因此需要在useAttributeAsKey
之后添加。试试这种方式,错误就会消失。
现在,如果我正确理解了你的问题,那么你想要的输出是:
->arrayNode(...)
您可以使用以下结构实现:
Array
(
[company] => Array
(
[company_1] => Array
(
[foo] => bar
[baz] => baz
)
[company_2] => Array
(
[foo] => bar
[baz] => baz
)
)
)
加载配置:
$rootNode
->children()
->arrayNode('company')
->prototype('array')
->children()
->scalarNode('foo')->end()
->scalarNode('baz')->end()
->end()
->end()
->end()
->end()
;
如果我误解了你的问题,请附上评论。