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