4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\Config\Definition\Builder;
14 use Symfony\Component\Config\Definition\NodeInterface;
17 * This is the entry class for building a config tree.
19 * @author Johannes M. Schmitt <schmittjoh@gmail.com>
21 class TreeBuilder implements NodeParentInterface
27 * @deprecated since 3.4. To be removed in 4.0
32 * Creates the root node.
34 * @param string $name The name of the root node
35 * @param string $type The type of the root node
36 * @param NodeBuilder $builder A custom node builder instance
38 * @return ArrayNodeDefinition|NodeDefinition The root node (as an ArrayNodeDefinition when the type is 'array')
40 * @throws \RuntimeException When the node type is not supported
42 public function root($name, $type = 'array', NodeBuilder $builder = null)
44 $builder = $builder ?: new NodeBuilder();
46 return $this->root = $builder->node($name, $type)->setParent($this);
52 * @return NodeInterface
54 * @throws \RuntimeException
56 public function buildTree()
58 if (null === $this->root) {
59 throw new \RuntimeException('The configuration tree has no root node.');
61 if (null !== $this->tree) {
65 return $this->tree = $this->root->getNode(true);