在Symfony2捆绑包配置中使用模板值
简而言之,我试图实现以下配置文件结构:在Symfony2捆绑包配置中使用模板值,symfony,dependency-injection,configuration,bundle,Symfony,Dependency Injection,Configuration,Bundle,简而言之,我试图实现以下配置文件结构: acmebundle: connections: @template: param1: value1 param2: value2 conn1: extends: @template param2: value3 在规范化过程中,我希望任何名称以“@”(在本例中为@template)开头的连接都被丢弃,并且根本不进行验证。但在此之前,在验证过程之前,所有扩展它的其他连接都应该在其中填充所
acmebundle:
connections:
@template:
param1: value1
param2: value2
conn1:
extends: @template
param2: value3
在规范化过程中,我希望任何名称以“@”(在本例中为@template)开头的连接都被丢弃,并且根本不进行验证。但在此之前,在验证过程之前,所有扩展它的其他连接都应该在其中填充所有@template值
这有可能吗?如有任何提示,将不胜感激。
目前,我有以下几点:
acmebundle:
connections:
@template: &template
abstract: true
param1: value1
param2: value2
conn1:
<<: *template
abstract: false
param2: value3
它可以工作,但很难看,因为我必须在每个实际连接上指定abstract:false,并且我必须依赖于YML特定的特性来复制粘贴模板值
private function getConnectionsNode()
{
$builder = new TreeBuilder();
$node = $builder->root('connections');
$node
->isRequired()
->requiresAtLeastOneElement()
->useAttributeAsKey('id')
->prototype('array')
->beforeNormalization()
->ifTrue(function($v) {
return isset($v['abstract']) && true === $v['abstract'];
})
->then(function($v) {
// Set dummy params to ensure validation is passed
if (empty($v['param1'])) {
$v['param1'] = 'undefined';
}
if (empty($v['param2'])) {
$v['param2'] = 'undefined';
}
return $v;
})
->end()
->children()
->booleanNode('abstract')
->defaultFalse()
->end()
->scalarNode('param1')
->isRequired()
->cannotBeEmpty()
->end()
->scalarNode('param2')
->isRequired()
->cannotBeEmpty()
->end()
->end()
->end();
return $node;
}