Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 /*
|
Chris@0
|
4 * This file is part of the Symfony package.
|
Chris@0
|
5 *
|
Chris@0
|
6 * (c) Fabien Potencier <fabien@symfony.com>
|
Chris@0
|
7 *
|
Chris@0
|
8 * For the full copyright and license information, please view the LICENSE
|
Chris@0
|
9 * file that was distributed with this source code.
|
Chris@0
|
10 */
|
Chris@0
|
11
|
Chris@0
|
12 namespace Symfony\Component\HttpFoundation;
|
Chris@0
|
13
|
Chris@0
|
14 /**
|
Chris@0
|
15 * ParameterBag is a container for key/value pairs.
|
Chris@0
|
16 *
|
Chris@0
|
17 * @author Fabien Potencier <fabien@symfony.com>
|
Chris@0
|
18 */
|
Chris@0
|
19 class ParameterBag implements \IteratorAggregate, \Countable
|
Chris@0
|
20 {
|
Chris@0
|
21 /**
|
Chris@0
|
22 * Parameter storage.
|
Chris@0
|
23 */
|
Chris@0
|
24 protected $parameters;
|
Chris@0
|
25
|
Chris@0
|
26 /**
|
Chris@0
|
27 * @param array $parameters An array of parameters
|
Chris@0
|
28 */
|
Chris@17
|
29 public function __construct(array $parameters = [])
|
Chris@0
|
30 {
|
Chris@0
|
31 $this->parameters = $parameters;
|
Chris@0
|
32 }
|
Chris@0
|
33
|
Chris@0
|
34 /**
|
Chris@0
|
35 * Returns the parameters.
|
Chris@0
|
36 *
|
Chris@0
|
37 * @return array An array of parameters
|
Chris@0
|
38 */
|
Chris@0
|
39 public function all()
|
Chris@0
|
40 {
|
Chris@0
|
41 return $this->parameters;
|
Chris@0
|
42 }
|
Chris@0
|
43
|
Chris@0
|
44 /**
|
Chris@0
|
45 * Returns the parameter keys.
|
Chris@0
|
46 *
|
Chris@0
|
47 * @return array An array of parameter keys
|
Chris@0
|
48 */
|
Chris@0
|
49 public function keys()
|
Chris@0
|
50 {
|
Chris@0
|
51 return array_keys($this->parameters);
|
Chris@0
|
52 }
|
Chris@0
|
53
|
Chris@0
|
54 /**
|
Chris@0
|
55 * Replaces the current parameters by a new set.
|
Chris@0
|
56 *
|
Chris@0
|
57 * @param array $parameters An array of parameters
|
Chris@0
|
58 */
|
Chris@17
|
59 public function replace(array $parameters = [])
|
Chris@0
|
60 {
|
Chris@0
|
61 $this->parameters = $parameters;
|
Chris@0
|
62 }
|
Chris@0
|
63
|
Chris@0
|
64 /**
|
Chris@0
|
65 * Adds parameters.
|
Chris@0
|
66 *
|
Chris@0
|
67 * @param array $parameters An array of parameters
|
Chris@0
|
68 */
|
Chris@17
|
69 public function add(array $parameters = [])
|
Chris@0
|
70 {
|
Chris@0
|
71 $this->parameters = array_replace($this->parameters, $parameters);
|
Chris@0
|
72 }
|
Chris@0
|
73
|
Chris@0
|
74 /**
|
Chris@0
|
75 * Returns a parameter by name.
|
Chris@0
|
76 *
|
Chris@0
|
77 * @param string $key The key
|
Chris@0
|
78 * @param mixed $default The default value if the parameter key does not exist
|
Chris@0
|
79 *
|
Chris@0
|
80 * @return mixed
|
Chris@0
|
81 */
|
Chris@0
|
82 public function get($key, $default = null)
|
Chris@0
|
83 {
|
Chris@18
|
84 return \array_key_exists($key, $this->parameters) ? $this->parameters[$key] : $default;
|
Chris@0
|
85 }
|
Chris@0
|
86
|
Chris@0
|
87 /**
|
Chris@0
|
88 * Sets a parameter by name.
|
Chris@0
|
89 *
|
Chris@0
|
90 * @param string $key The key
|
Chris@0
|
91 * @param mixed $value The value
|
Chris@0
|
92 */
|
Chris@0
|
93 public function set($key, $value)
|
Chris@0
|
94 {
|
Chris@0
|
95 $this->parameters[$key] = $value;
|
Chris@0
|
96 }
|
Chris@0
|
97
|
Chris@0
|
98 /**
|
Chris@0
|
99 * Returns true if the parameter is defined.
|
Chris@0
|
100 *
|
Chris@0
|
101 * @param string $key The key
|
Chris@0
|
102 *
|
Chris@0
|
103 * @return bool true if the parameter exists, false otherwise
|
Chris@0
|
104 */
|
Chris@0
|
105 public function has($key)
|
Chris@0
|
106 {
|
Chris@18
|
107 return \array_key_exists($key, $this->parameters);
|
Chris@0
|
108 }
|
Chris@0
|
109
|
Chris@0
|
110 /**
|
Chris@0
|
111 * Removes a parameter.
|
Chris@0
|
112 *
|
Chris@0
|
113 * @param string $key The key
|
Chris@0
|
114 */
|
Chris@0
|
115 public function remove($key)
|
Chris@0
|
116 {
|
Chris@0
|
117 unset($this->parameters[$key]);
|
Chris@0
|
118 }
|
Chris@0
|
119
|
Chris@0
|
120 /**
|
Chris@0
|
121 * Returns the alphabetic characters of the parameter value.
|
Chris@0
|
122 *
|
Chris@0
|
123 * @param string $key The parameter key
|
Chris@0
|
124 * @param string $default The default value if the parameter key does not exist
|
Chris@0
|
125 *
|
Chris@0
|
126 * @return string The filtered value
|
Chris@0
|
127 */
|
Chris@0
|
128 public function getAlpha($key, $default = '')
|
Chris@0
|
129 {
|
Chris@0
|
130 return preg_replace('/[^[:alpha:]]/', '', $this->get($key, $default));
|
Chris@0
|
131 }
|
Chris@0
|
132
|
Chris@0
|
133 /**
|
Chris@0
|
134 * Returns the alphabetic characters and digits of the parameter value.
|
Chris@0
|
135 *
|
Chris@0
|
136 * @param string $key The parameter key
|
Chris@0
|
137 * @param string $default The default value if the parameter key does not exist
|
Chris@0
|
138 *
|
Chris@0
|
139 * @return string The filtered value
|
Chris@0
|
140 */
|
Chris@0
|
141 public function getAlnum($key, $default = '')
|
Chris@0
|
142 {
|
Chris@0
|
143 return preg_replace('/[^[:alnum:]]/', '', $this->get($key, $default));
|
Chris@0
|
144 }
|
Chris@0
|
145
|
Chris@0
|
146 /**
|
Chris@0
|
147 * Returns the digits of the parameter value.
|
Chris@0
|
148 *
|
Chris@0
|
149 * @param string $key The parameter key
|
Chris@0
|
150 * @param string $default The default value if the parameter key does not exist
|
Chris@0
|
151 *
|
Chris@0
|
152 * @return string The filtered value
|
Chris@0
|
153 */
|
Chris@0
|
154 public function getDigits($key, $default = '')
|
Chris@0
|
155 {
|
Chris@0
|
156 // we need to remove - and + because they're allowed in the filter
|
Chris@17
|
157 return str_replace(['-', '+'], '', $this->filter($key, $default, FILTER_SANITIZE_NUMBER_INT));
|
Chris@0
|
158 }
|
Chris@0
|
159
|
Chris@0
|
160 /**
|
Chris@0
|
161 * Returns the parameter value converted to integer.
|
Chris@0
|
162 *
|
Chris@0
|
163 * @param string $key The parameter key
|
Chris@0
|
164 * @param int $default The default value if the parameter key does not exist
|
Chris@0
|
165 *
|
Chris@0
|
166 * @return int The filtered value
|
Chris@0
|
167 */
|
Chris@0
|
168 public function getInt($key, $default = 0)
|
Chris@0
|
169 {
|
Chris@0
|
170 return (int) $this->get($key, $default);
|
Chris@0
|
171 }
|
Chris@0
|
172
|
Chris@0
|
173 /**
|
Chris@0
|
174 * Returns the parameter value converted to boolean.
|
Chris@0
|
175 *
|
Chris@0
|
176 * @param string $key The parameter key
|
Chris@17
|
177 * @param bool $default The default value if the parameter key does not exist
|
Chris@0
|
178 *
|
Chris@0
|
179 * @return bool The filtered value
|
Chris@0
|
180 */
|
Chris@0
|
181 public function getBoolean($key, $default = false)
|
Chris@0
|
182 {
|
Chris@0
|
183 return $this->filter($key, $default, FILTER_VALIDATE_BOOLEAN);
|
Chris@0
|
184 }
|
Chris@0
|
185
|
Chris@0
|
186 /**
|
Chris@0
|
187 * Filter key.
|
Chris@0
|
188 *
|
Chris@0
|
189 * @param string $key Key
|
Chris@0
|
190 * @param mixed $default Default = null
|
Chris@0
|
191 * @param int $filter FILTER_* constant
|
Chris@0
|
192 * @param mixed $options Filter options
|
Chris@0
|
193 *
|
Chris@0
|
194 * @see http://php.net/manual/en/function.filter-var.php
|
Chris@0
|
195 *
|
Chris@0
|
196 * @return mixed
|
Chris@0
|
197 */
|
Chris@17
|
198 public function filter($key, $default = null, $filter = FILTER_DEFAULT, $options = [])
|
Chris@0
|
199 {
|
Chris@0
|
200 $value = $this->get($key, $default);
|
Chris@0
|
201
|
Chris@0
|
202 // Always turn $options into an array - this allows filter_var option shortcuts.
|
Chris@17
|
203 if (!\is_array($options) && $options) {
|
Chris@17
|
204 $options = ['flags' => $options];
|
Chris@0
|
205 }
|
Chris@0
|
206
|
Chris@0
|
207 // Add a convenience check for arrays.
|
Chris@17
|
208 if (\is_array($value) && !isset($options['flags'])) {
|
Chris@0
|
209 $options['flags'] = FILTER_REQUIRE_ARRAY;
|
Chris@0
|
210 }
|
Chris@0
|
211
|
Chris@0
|
212 return filter_var($value, $filter, $options);
|
Chris@0
|
213 }
|
Chris@0
|
214
|
Chris@0
|
215 /**
|
Chris@0
|
216 * Returns an iterator for parameters.
|
Chris@0
|
217 *
|
Chris@0
|
218 * @return \ArrayIterator An \ArrayIterator instance
|
Chris@0
|
219 */
|
Chris@0
|
220 public function getIterator()
|
Chris@0
|
221 {
|
Chris@0
|
222 return new \ArrayIterator($this->parameters);
|
Chris@0
|
223 }
|
Chris@0
|
224
|
Chris@0
|
225 /**
|
Chris@0
|
226 * Returns the number of parameters.
|
Chris@0
|
227 *
|
Chris@0
|
228 * @return int The number of parameters
|
Chris@0
|
229 */
|
Chris@0
|
230 public function count()
|
Chris@0
|
231 {
|
Chris@17
|
232 return \count($this->parameters);
|
Chris@0
|
233 }
|
Chris@0
|
234 }
|