Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Symfony2捆绑包配置中使用模板值_Symfony_Dependency Injection_Configuration_Bundle - Fatal编程技术网

在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;
}