Version 1
[yaffs-website] / vendor / symfony / config / Definition / VariableNode.php
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;
13
14 use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
15
16 /**
17  * This node represents a value of variable type in the config tree.
18  *
19  * This node is intended for values of arbitrary type.
20  * Any PHP type is accepted as a value.
21  *
22  * @author Jeremy Mikola <jmikola@gmail.com>
23  */
24 class VariableNode extends BaseNode implements PrototypeNodeInterface
25 {
26     protected $defaultValueSet = false;
27     protected $defaultValue;
28     protected $allowEmptyValue = true;
29
30     /**
31      * {@inheritdoc}
32      */
33     public function setDefaultValue($value)
34     {
35         $this->defaultValueSet = true;
36         $this->defaultValue = $value;
37     }
38
39     /**
40      * {@inheritdoc}
41      */
42     public function hasDefaultValue()
43     {
44         return $this->defaultValueSet;
45     }
46
47     /**
48      * {@inheritdoc}
49      */
50     public function getDefaultValue()
51     {
52         $v = $this->defaultValue;
53
54         return $v instanceof \Closure ? $v() : $v;
55     }
56
57     /**
58      * Sets if this node is allowed to have an empty value.
59      *
60      * @param bool $boolean True if this entity will accept empty values
61      */
62     public function setAllowEmptyValue($boolean)
63     {
64         $this->allowEmptyValue = (bool) $boolean;
65     }
66
67     /**
68      * {@inheritdoc}
69      */
70     public function setName($name)
71     {
72         $this->name = $name;
73     }
74
75     /**
76      * {@inheritdoc}
77      */
78     protected function validateType($value)
79     {
80     }
81
82     /**
83      * {@inheritdoc}
84      */
85     protected function finalizeValue($value)
86     {
87         if (!$this->allowEmptyValue && $this->isValueEmpty($value)) {
88             $ex = new InvalidConfigurationException(sprintf(
89                 'The path "%s" cannot contain an empty value, but got %s.',
90                 $this->getPath(),
91                 json_encode($value)
92             ));
93             if ($hint = $this->getInfo()) {
94                 $ex->addHint($hint);
95             }
96             $ex->setPath($this->getPath());
97
98             throw $ex;
99         }
100
101         return $value;
102     }
103
104     /**
105      * {@inheritdoc}
106      */
107     protected function normalizeValue($value)
108     {
109         return $value;
110     }
111
112     /**
113      * {@inheritdoc}
114      */
115     protected function mergeValues($leftSide, $rightSide)
116     {
117         return $rightSide;
118     }
119
120     /**
121      * Evaluates if the given value is to be treated as empty.
122      *
123      * By default, PHP's empty() function is used to test for emptiness. This
124      * method may be overridden by subtypes to better match their understanding
125      * of empty data.
126      *
127      * @param mixed $value
128      *
129      * @return bool
130      */
131     protected function isValueEmpty($value)
132     {
133         return empty($value);
134     }
135 }