Verzeichnisstruktur phpBB-3.2.0
- Veröffentlicht
- 06.01.2017
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. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
NodeDefinition.php
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 use Symfony\Component\Config\Definition\NodeInterface;
015 use Symfony\Component\Config\Definition\Exception\InvalidDefinitionException;
016
017 /**
018 * This class provides a fluent interface for defining a node.
019 *
020 * @author Johannes M. Schmitt <schmittjoh@gmail.com>
021 */
022 abstract class NodeDefinition implements NodeParentInterface
023 {
024 protected $name;
025 protected $normalization;
026 protected $validation;
027 protected $defaultValue;
028 protected $default = false;
029 protected $required = false;
030 protected $merge;
031 protected $allowEmptyValue = true;
032 protected $nullEquivalent;
033 protected $trueEquivalent = true;
034 protected $falseEquivalent = false;
035
036 /**
037 * @var NodeParentInterface|null
038 */
039 protected $parent;
040 protected $attributes = array();
041
042 /**
043 * Constructor.
044 *
045 * @param string $name The name of the node
046 * @param NodeParentInterface|null $parent The parent
047 */
048 public function __construct($name, NodeParentInterface $parent = null)
049 {
050 $this->parent = $parent;
051 $this->name = $name;
052 }
053
054 /**
055 * Sets the parent node.
056 *
057 * @param NodeParentInterface $parent The parent
058 *
059 * @return NodeDefinition|$this
060 */
061 public function setParent(NodeParentInterface $parent)
062 {
063 $this->parent = $parent;
064
065 return $this;
066 }
067
068 /**
069 * Sets info message.
070 *
071 * @param string $info The info text
072 *
073 * @return NodeDefinition|$this
074 */
075 public function info($info)
076 {
077 return $this->attribute('info', $info);
078 }
079
080 /**
081 * Sets example configuration.
082 *
083 * @param string|array $example
084 *
085 * @return NodeDefinition|$this
086 */
087 public function example($example)
088 {
089 return $this->attribute('example', $example);
090 }
091
092 /**
093 * Sets an attribute on the node.
094 *
095 * @param string $key
096 * @param mixed $value
097 *
098 * @return NodeDefinition|$this
099 */
100 public function attribute($key, $value)
101 {
102 $this->attributes[$key] = $value;
103
104 return $this;
105 }
106
107 /**
108 * Returns the parent node.
109 *
110 * @return NodeParentInterface|NodeBuilder|NodeDefinition|null The builder of the parent node
111 */
112 public function end()
113 {
114 return $this->parent;
115 }
116
117 /**
118 * Creates the node.
119 *
120 * @param bool $forceRootNode Whether to force this node as the root node
121 *
122 * @return NodeInterface
123 */
124 public function getNode($forceRootNode = false)
125 {
126 if ($forceRootNode) {
127 $this->parent = null;
128 }
129
130 if (null !== $this->normalization) {
131 $this->normalization->before = ExprBuilder::buildExpressions($this->normalization->before);
132 }
133
134 if (null !== $this->validation) {
135 $this->validation->rules = ExprBuilder::buildExpressions($this->validation->rules);
136 }
137
138 $node = $this->createNode();
139 $node->setAttributes($this->attributes);
140
141 return $node;
142 }
143
144 /**
145 * Sets the default value.
146 *
147 * @param mixed $value The default value
148 *
149 * @return NodeDefinition|$this
150 */
151 public function defaultValue($value)
152 {
153 $this->default = true;
154 $this->defaultValue = $value;
155
156 return $this;
157 }
158
159 /**
160 * Sets the node as required.
161 *
162 * @return NodeDefinition|$this
163 */
164 public function isRequired()
165 {
166 $this->required = true;
167
168 return $this;
169 }
170
171 /**
172 * Sets the equivalent value used when the node contains null.
173 *
174 * @param mixed $value
175 *
176 * @return NodeDefinition|$this
177 */
178 public function treatNullLike($value)
179 {
180 $this->nullEquivalent = $value;
181
182 return $this;
183 }
184
185 /**
186 * Sets the equivalent value used when the node contains true.
187 *
188 * @param mixed $value
189 *
190 * @return NodeDefinition|$this
191 */
192 public function treatTrueLike($value)
193 {
194 $this->trueEquivalent = $value;
195
196 return $this;
197 }
198
199 /**
200 * Sets the equivalent value used when the node contains false.
201 *
202 * @param mixed $value
203 *
204 * @return NodeDefinition|$this
205 */
206 public function treatFalseLike($value)
207 {
208 $this->falseEquivalent = $value;
209
210 return $this;
211 }
212
213 /**
214 * Sets null as the default value.
215 *
216 * @return NodeDefinition|$this
217 */
218 public function defaultNull()
219 {
220 return $this->defaultValue(null);
221 }
222
223 /**
224 * Sets true as the default value.
225 *
226 * @return NodeDefinition|$this
227 */
228 public function defaultTrue()
229 {
230 return $this->defaultValue(true);
231 }
232
233 /**
234 * Sets false as the default value.
235 *
236 * @return NodeDefinition|$this
237 */
238 public function defaultFalse()
239 {
240 return $this->defaultValue(false);
241 }
242
243 /**
244 * Sets an expression to run before the normalization.
245 *
246 * @return ExprBuilder
247 */
248 public function beforeNormalization()
249 {
250 return $this->normalization()->before();
251 }
252
253 /**
254 * Denies the node value being empty.
255 *
256 * @return NodeDefinition|$this
257 */
258 public function cannotBeEmpty()
259 {
260 $this->allowEmptyValue = false;
261
262 return $this;
263 }
264
265 /**
266 * Sets an expression to run for the validation.
267 *
268 * The expression receives the value of the node and must return it. It can
269 * modify it.
270 * An exception should be thrown when the node is not valid.
271 *
272 * @return ExprBuilder
273 */
274 public function validate()
275 {
276 return $this->validation()->rule();
277 }
278
279 /**
280 * Sets whether the node can be overwritten.
281 *
282 * @param bool $deny Whether the overwriting is forbidden or not
283 *
284 * @return NodeDefinition|$this
285 */
286 public function cannotBeOverwritten($deny = true)
287 {
288 $this->merge()->denyOverwrite($deny);
289
290 return $this;
291 }
292
293 /**
294 * Gets the builder for validation rules.
295 *
296 * @return ValidationBuilder
297 */
298 protected function validation()
299 {
300 if (null === $this->validation) {
301 $this->validation = new ValidationBuilder($this);
302 }
303
304 return $this->validation;
305 }
306
307 /**
308 * Gets the builder for merging rules.
309 *
310 * @return MergeBuilder
311 */
312 protected function merge()
313 {
314 if (null === $this->merge) {
315 $this->merge = new MergeBuilder($this);
316 }
317
318 return $this->merge;
319 }
320
321 /**
322 * Gets the builder for normalization rules.
323 *
324 * @return NormalizationBuilder
325 */
326 protected function normalization()
327 {
328 if (null === $this->normalization) {
329 $this->normalization = new NormalizationBuilder($this);
330 }
331
332 return $this->normalization;
333 }
334
335 /**
336 * Instantiate and configure the node according to this definition.
337 *
338 * @return NodeInterface $node The node instance
339 *
340 * @throws InvalidDefinitionException When the definition is invalid
341 */
342 abstract protected function createNode();
343 }
344