diff --git a/src/Symfony/Component/Config/Definition/Builder/NodeBuilder.php b/src/Symfony/Component/Config/Definition/Builder/NodeBuilder.php index a0ecae3cc51f..174a4585f6bf 100644 --- a/src/Symfony/Component/Config/Definition/Builder/NodeBuilder.php +++ b/src/Symfony/Component/Config/Definition/Builder/NodeBuilder.php @@ -101,6 +101,29 @@ public function node($name, $type) return $this->children[$name] = $node; } + /** + * Add a NodeBuilder instance directly. + * + * This helps achieve a fluid interface when a method on your Configuration + * class returns a pre-build NodeBuilder instance on your behalf: + * + * $root = new NodeBuilder(); + * ->node('foo', 'scalar') + * ->addNodeBuilder($this->getBarNodeBuilder()) + * ->node('baz', 'scalar') + * ; + * + * @return Symfony\Component\DependencyInjection\Configuration\Builder\NodeBuilder This builder node + */ + public function addNodeBuilder(NodeBuilder $node) + { + $node->parent = $this; + + $this->children[$node->name] = $node; + + return $this; + } + /** * Creates a child array node * diff --git a/tests/Symfony/Tests/Component/DependencyInjection/Configuration/Builder/NodeBuilderTest.php b/tests/Symfony/Tests/Component/DependencyInjection/Configuration/Builder/NodeBuilderTest.php new file mode 100644 index 000000000000..cf9b46df4135 --- /dev/null +++ b/tests/Symfony/Tests/Component/DependencyInjection/Configuration/Builder/NodeBuilderTest.php @@ -0,0 +1,18 @@ +addNodeBuilder($childNode); + $this->assertEquals(array('child' => $childNode), $nodeBuilder->children); + $this->assertEquals($nodeBuilder, $ret); + } +} \ No newline at end of file