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