Verzeichnisstruktur phpBB-3.1.0


Veröffentlicht
27.10.2014

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

NodeBuilder.php

Zuletzt modifiziert: 09.10.2024, 12:59 - Dateigröße: 5.92 KiB


001  <?php
002   
003  /*
004   * This file is part of the Symfony package.
005   *
006   * (c) Fabien Potencier <fabien@symfony.com>
007   *
008   * For the full copyright and license information, please view the LICENSE
009   * file that was distributed with this source code.
010   */
011   
012  namespace Symfony\Component\Config\Definition\Builder;
013   
014  /**
015   * This class provides a fluent interface for building a node.
016   *
017   * @author Johannes M. Schmitt <schmittjoh@gmail.com>
018   */
019  class NodeBuilder implements NodeParentInterface
020  {
021      protected $parent;
022      protected $nodeMapping;
023   
024      /**
025       * Constructor
026       *
027       */
028      public function __construct()
029      {
030          $this->nodeMapping = array(
031              'variable'    => __NAMESPACE__.'\\VariableNodeDefinition',
032              'scalar'      => __NAMESPACE__.'\\ScalarNodeDefinition',
033              'boolean'     => __NAMESPACE__.'\\BooleanNodeDefinition',
034              'integer'     => __NAMESPACE__.'\\IntegerNodeDefinition',
035              'float'       => __NAMESPACE__.'\\FloatNodeDefinition',
036              'array'       => __NAMESPACE__.'\\ArrayNodeDefinition',
037              'enum'        => __NAMESPACE__.'\\EnumNodeDefinition',
038          );
039      }
040   
041      /**
042       * Set the parent node.
043       *
044       * @param ParentNodeDefinitionInterface $parent The parent node
045       *
046       * @return NodeBuilder This node builder
047       */
048      public function setParent(ParentNodeDefinitionInterface $parent = null)
049      {
050          $this->parent = $parent;
051   
052          return $this;
053      }
054   
055      /**
056       * Creates a child array node.
057       *
058       * @param string $name The name of the node
059       *
060       * @return ArrayNodeDefinition The child node
061       */
062      public function arrayNode($name)
063      {
064          return $this->node($name, 'array');
065      }
066   
067      /**
068       * Creates a child scalar node.
069       *
070       * @param string $name the name of the node
071       *
072       * @return ScalarNodeDefinition The child node
073       */
074      public function scalarNode($name)
075      {
076          return $this->node($name, 'scalar');
077      }
078   
079      /**
080       * Creates a child Boolean node.
081       *
082       * @param string $name The name of the node
083       *
084       * @return BooleanNodeDefinition The child node
085       */
086      public function booleanNode($name)
087      {
088          return $this->node($name, 'boolean');
089      }
090   
091      /**
092       * Creates a child integer node.
093       *
094       * @param string $name the name of the node
095       *
096       * @return IntegerNodeDefinition The child node
097       */
098      public function integerNode($name)
099      {
100          return $this->node($name, 'integer');
101      }
102   
103      /**
104       * Creates a child float node.
105       *
106       * @param string $name the name of the node
107       *
108       * @return FloatNodeDefinition The child node
109       */
110      public function floatNode($name)
111      {
112          return $this->node($name, 'float');
113      }
114   
115      /**
116       * Creates a child EnumNode.
117       *
118       * @param string $name
119       *
120       * @return EnumNodeDefinition
121       */
122      public function enumNode($name)
123      {
124          return $this->node($name, 'enum');
125      }
126   
127      /**
128       * Creates a child variable node.
129       *
130       * @param string $name The name of the node
131       *
132       * @return VariableNodeDefinition The builder of the child node
133       */
134      public function variableNode($name)
135      {
136          return $this->node($name, 'variable');
137      }
138   
139      /**
140       * Returns the parent node.
141       *
142       * @return ParentNodeDefinitionInterface The parent node
143       */
144      public function end()
145      {
146          return $this->parent;
147      }
148   
149      /**
150       * Creates a child node.
151       *
152       * @param string $name The name of the node
153       * @param string $type The type of the node
154       *
155       * @return NodeDefinition The child node
156       *
157       * @throws \RuntimeException When the node type is not registered
158       * @throws \RuntimeException When the node class is not found
159       */
160      public function node($name, $type)
161      {
162          $class = $this->getNodeClass($type);
163   
164          $node = new $class($name);
165   
166          $this->append($node);
167   
168          return $node;
169      }
170   
171      /**
172       * Appends a node definition.
173       *
174       * Usage:
175       *
176       *     $node = new ArrayNodeDefinition('name')
177       *         ->children()
178       *             ->scalarNode('foo')->end()
179       *             ->scalarNode('baz')->end()
180       *             ->append($this->getBarNodeDefinition())
181       *         ->end()
182       *     ;
183       *
184       * @param NodeDefinition $node
185       *
186       * @return NodeBuilder This node builder
187       */
188      public function append(NodeDefinition $node)
189      {
190          if ($node instanceof ParentNodeDefinitionInterface) {
191              $builder = clone $this;
192              $builder->setParent(null);
193              $node->setBuilder($builder);
194          }
195   
196          if (null !== $this->parent) {
197              $this->parent->append($node);
198              // Make this builder the node parent to allow for a fluid interface
199              $node->setParent($this);
200          }
201   
202          return $this;
203      }
204   
205      /**
206       * Adds or overrides a node Type.
207       *
208       * @param string $type  The name of the type
209       * @param string $class The fully qualified name the node definition class
210       *
211       * @return NodeBuilder This node builder
212       */
213      public function setNodeClass($type, $class)
214      {
215          $this->nodeMapping[strtolower($type)] = $class;
216   
217          return $this;
218      }
219   
220      /**
221       * Returns the class name of the node definition.
222       *
223       * @param string $type The node type
224       *
225       * @return string The node definition class name
226       *
227       * @throws \RuntimeException When the node type is not registered
228       * @throws \RuntimeException When the node class is not found
229       */
230      protected function getNodeClass($type)
231      {
232          $type = strtolower($type);
233   
234          if (!isset($this->nodeMapping[$type])) {
235              throw new \RuntimeException(sprintf('The node type "%s" is not registered.', $type));
236          }
237   
238          $class = $this->nodeMapping[$type];
239   
240          if (!class_exists($class)) {
241              throw new \RuntimeException(sprintf('The node class "%s" does not exist.', $class));
242          }
243   
244          return $class;
245      }
246  }
247