Prechádzať zdrojové kódy

[DependencyInjection] Adding a NodeBuilder::addNodeBuilder() method that helps achieve a fluid interface when a pre-built NodeBuilder needs to be added.

Ryan Weaver 14 rokov pred
rodič
commit
bd15ddda96

+ 23 - 0
src/Symfony/Component/Config/Definition/Builder/NodeBuilder.php

@@ -101,6 +101,29 @@ class NodeBuilder
         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
      *

+ 18 - 0
tests/Symfony/Tests/Component/DependencyInjection/Configuration/Builder/NodeBuilderTest.php

@@ -0,0 +1,18 @@
+<?php
+
+namespace Symfony\Tests\Component\DependencyInjection\Configuration;
+
+use Symfony\Component\DependencyInjection\Configuration\Builder\NodeBuilder;
+
+class NodeBuilderTest extends \PHPUnit_Framework_TestCase
+{
+    public function testAddNodeBuilder()
+    {
+        $nodeBuilder = new NodeBuilder('root', array());
+        $childNode = new NodeBuilder('child', array());
+
+        $ret = $nodeBuilder->addNodeBuilder($childNode);
+        $this->assertEquals(array('child' => $childNode), $nodeBuilder->children);
+        $this->assertEquals($nodeBuilder, $ret);
+    }
+}