Как объединить без перезаписи добавленные части конфигурации с помощью Symfony / Config ~ 2.6

У меня 2+ Symfony\Component\Console\Commandкаждый из которых возвращает часть конфигурации Symfony\Component\Config\Definition\Builder\TreeBuilder:

class ProjectFooCommand extends Command {
public function getConfigTree()
{
return (new TreeBuilder())
->root('project')
->children()
->arrayNode('foo')
->children()
// specific
->end()
->end()
->end()

;
}
}
class ProjectBarCommand extends Command {
public function getConfigTree()
{
return (new TreeBuilder())
->root('project')
->children()
->arrayNode('bar')
->children()
// specific
->end()
->end()
->end()

;
}
}

и они объединены в одну конфигурацию с помощью ArrayNodeDefinition::append():

class Configuration implements ConfigurationInterface
{
public function getConfigTreeBuilder()
{
$builder = new TreeBuilder();

$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('codio');

$rootNode
->children()
->scalarNode('lorem')->defaultValue('ABC')->end()
->scalarNode('ipsum')->defaultValue('123')->end()
->end()
;

foreach ($this->application->all() as $command)
{
$rootNode->append($command->getConfigTree());
}

return $treeBuilder;
}
}

все работает, когда в конфигурацию добавляется только одна команда. Когда я пытаюсь добавить секунду, она перезаписывает ранее добавленное. Как это исправить?

Должно быть:

codio:
lorem: ABC
ipsum: 123
project:
foo:
...
bar:
...

Текущий:

codio:
lorem: ABC
ipsum: 123
project:
bar:
...

1

Решение

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]