1: <?php
2:
3: /*
4: * This file is part of the Symfony package.
5: *
6: * (c) Fabien Potencier <fabien@symfony.com>
7: *
8: * For the full copyright and license information, please view the LICENSE
9: * file that was distributed with this source code.
10: */
11:
12: namespace Symfony\Component\Config\Definition\Builder;
13:
14: use Symfony\Component\Config\Definition\NodeInterface;
15:
16: /**
17: * This is the entry class for building a config tree.
18: *
19: * @author Johannes M. Schmitt <schmittjoh@gmail.com>
20: */
21: class TreeBuilder implements NodeParentInterface
22: {
23: protected $tree;
24: protected $root;
25: protected $builder;
26:
27: /**
28: * Creates the root node.
29: *
30: * @param string $name The name of the root node
31: * @param string $type The type of the root node
32: * @param NodeBuilder $builder A custom node builder instance
33: *
34: * @return ArrayNodeDefinition|NodeDefinition The root node (as an ArrayNodeDefinition when the type is 'array')
35: *
36: * @throws \RuntimeException When the node type is not supported
37: */
38: public function root($name, $type = 'array', NodeBuilder $builder = null)
39: {
40: $builder = $builder ?: new NodeBuilder();
41:
42: return $this->root = $builder->node($name, $type)->setParent($this);
43: }
44:
45: /**
46: * Builds the tree.
47: *
48: * @return NodeInterface
49: *
50: * @throws \RuntimeException
51: */
52: public function buildTree()
53: {
54: if (null === $this->root) {
55: throw new \RuntimeException('The configuration tree has no root node.');
56: }
57: if (null !== $this->tree) {
58: return $this->tree;
59: }
60:
61: return $this->tree = $this->root->getNode(true);
62: }
63: }
64: