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\Routing;
|
Chris@0
|
13
|
Chris@0
|
14 /**
|
Chris@0
|
15 * A Route describes a route and its parameters.
|
Chris@0
|
16 *
|
Chris@0
|
17 * @author Fabien Potencier <fabien@symfony.com>
|
Chris@0
|
18 * @author Tobias Schultze <http://tobion.de>
|
Chris@0
|
19 */
|
Chris@0
|
20 class Route implements \Serializable
|
Chris@0
|
21 {
|
Chris@0
|
22 /**
|
Chris@0
|
23 * @var string
|
Chris@0
|
24 */
|
Chris@0
|
25 private $path = '/';
|
Chris@0
|
26
|
Chris@0
|
27 /**
|
Chris@0
|
28 * @var string
|
Chris@0
|
29 */
|
Chris@0
|
30 private $host = '';
|
Chris@0
|
31
|
Chris@0
|
32 /**
|
Chris@0
|
33 * @var array
|
Chris@0
|
34 */
|
Chris@0
|
35 private $schemes = array();
|
Chris@0
|
36
|
Chris@0
|
37 /**
|
Chris@0
|
38 * @var array
|
Chris@0
|
39 */
|
Chris@0
|
40 private $methods = array();
|
Chris@0
|
41
|
Chris@0
|
42 /**
|
Chris@0
|
43 * @var array
|
Chris@0
|
44 */
|
Chris@0
|
45 private $defaults = array();
|
Chris@0
|
46
|
Chris@0
|
47 /**
|
Chris@0
|
48 * @var array
|
Chris@0
|
49 */
|
Chris@0
|
50 private $requirements = array();
|
Chris@0
|
51
|
Chris@0
|
52 /**
|
Chris@0
|
53 * @var array
|
Chris@0
|
54 */
|
Chris@0
|
55 private $options = array();
|
Chris@0
|
56
|
Chris@0
|
57 /**
|
Chris@0
|
58 * @var null|CompiledRoute
|
Chris@0
|
59 */
|
Chris@0
|
60 private $compiled;
|
Chris@0
|
61
|
Chris@0
|
62 /**
|
Chris@0
|
63 * @var string
|
Chris@0
|
64 */
|
Chris@0
|
65 private $condition = '';
|
Chris@0
|
66
|
Chris@0
|
67 /**
|
Chris@0
|
68 * Constructor.
|
Chris@0
|
69 *
|
Chris@0
|
70 * Available options:
|
Chris@0
|
71 *
|
Chris@0
|
72 * * compiler_class: A class name able to compile this route instance (RouteCompiler by default)
|
Chris@0
|
73 * * utf8: Whether UTF-8 matching is enforced ot not
|
Chris@0
|
74 *
|
Chris@0
|
75 * @param string $path The path pattern to match
|
Chris@0
|
76 * @param array $defaults An array of default parameter values
|
Chris@0
|
77 * @param array $requirements An array of requirements for parameters (regexes)
|
Chris@0
|
78 * @param array $options An array of options
|
Chris@0
|
79 * @param string $host The host pattern to match
|
Chris@0
|
80 * @param string|array $schemes A required URI scheme or an array of restricted schemes
|
Chris@0
|
81 * @param string|array $methods A required HTTP method or an array of restricted methods
|
Chris@0
|
82 * @param string $condition A condition that should evaluate to true for the route to match
|
Chris@0
|
83 */
|
Chris@0
|
84 public function __construct($path, array $defaults = array(), array $requirements = array(), array $options = array(), $host = '', $schemes = array(), $methods = array(), $condition = '')
|
Chris@0
|
85 {
|
Chris@0
|
86 $this->setPath($path);
|
Chris@0
|
87 $this->setDefaults($defaults);
|
Chris@0
|
88 $this->setRequirements($requirements);
|
Chris@0
|
89 $this->setOptions($options);
|
Chris@0
|
90 $this->setHost($host);
|
Chris@0
|
91 $this->setSchemes($schemes);
|
Chris@0
|
92 $this->setMethods($methods);
|
Chris@0
|
93 $this->setCondition($condition);
|
Chris@0
|
94 }
|
Chris@0
|
95
|
Chris@0
|
96 /**
|
Chris@0
|
97 * {@inheritdoc}
|
Chris@0
|
98 */
|
Chris@0
|
99 public function serialize()
|
Chris@0
|
100 {
|
Chris@0
|
101 return serialize(array(
|
Chris@0
|
102 'path' => $this->path,
|
Chris@0
|
103 'host' => $this->host,
|
Chris@0
|
104 'defaults' => $this->defaults,
|
Chris@0
|
105 'requirements' => $this->requirements,
|
Chris@0
|
106 'options' => $this->options,
|
Chris@0
|
107 'schemes' => $this->schemes,
|
Chris@0
|
108 'methods' => $this->methods,
|
Chris@0
|
109 'condition' => $this->condition,
|
Chris@0
|
110 'compiled' => $this->compiled,
|
Chris@0
|
111 ));
|
Chris@0
|
112 }
|
Chris@0
|
113
|
Chris@0
|
114 /**
|
Chris@0
|
115 * {@inheritdoc}
|
Chris@0
|
116 */
|
Chris@0
|
117 public function unserialize($serialized)
|
Chris@0
|
118 {
|
Chris@0
|
119 $data = unserialize($serialized);
|
Chris@0
|
120 $this->path = $data['path'];
|
Chris@0
|
121 $this->host = $data['host'];
|
Chris@0
|
122 $this->defaults = $data['defaults'];
|
Chris@0
|
123 $this->requirements = $data['requirements'];
|
Chris@0
|
124 $this->options = $data['options'];
|
Chris@0
|
125 $this->schemes = $data['schemes'];
|
Chris@0
|
126 $this->methods = $data['methods'];
|
Chris@0
|
127
|
Chris@0
|
128 if (isset($data['condition'])) {
|
Chris@0
|
129 $this->condition = $data['condition'];
|
Chris@0
|
130 }
|
Chris@0
|
131 if (isset($data['compiled'])) {
|
Chris@0
|
132 $this->compiled = $data['compiled'];
|
Chris@0
|
133 }
|
Chris@0
|
134 }
|
Chris@0
|
135
|
Chris@0
|
136 /**
|
Chris@0
|
137 * Returns the pattern for the path.
|
Chris@0
|
138 *
|
Chris@0
|
139 * @return string The path pattern
|
Chris@0
|
140 */
|
Chris@0
|
141 public function getPath()
|
Chris@0
|
142 {
|
Chris@0
|
143 return $this->path;
|
Chris@0
|
144 }
|
Chris@0
|
145
|
Chris@0
|
146 /**
|
Chris@0
|
147 * Sets the pattern for the path.
|
Chris@0
|
148 *
|
Chris@0
|
149 * This method implements a fluent interface.
|
Chris@0
|
150 *
|
Chris@0
|
151 * @param string $pattern The path pattern
|
Chris@0
|
152 *
|
Chris@0
|
153 * @return $this
|
Chris@0
|
154 */
|
Chris@0
|
155 public function setPath($pattern)
|
Chris@0
|
156 {
|
Chris@0
|
157 // A pattern must start with a slash and must not have multiple slashes at the beginning because the
|
Chris@0
|
158 // generated path for this route would be confused with a network path, e.g. '//domain.com/path'.
|
Chris@0
|
159 $this->path = '/'.ltrim(trim($pattern), '/');
|
Chris@0
|
160 $this->compiled = null;
|
Chris@0
|
161
|
Chris@0
|
162 return $this;
|
Chris@0
|
163 }
|
Chris@0
|
164
|
Chris@0
|
165 /**
|
Chris@0
|
166 * Returns the pattern for the host.
|
Chris@0
|
167 *
|
Chris@0
|
168 * @return string The host pattern
|
Chris@0
|
169 */
|
Chris@0
|
170 public function getHost()
|
Chris@0
|
171 {
|
Chris@0
|
172 return $this->host;
|
Chris@0
|
173 }
|
Chris@0
|
174
|
Chris@0
|
175 /**
|
Chris@0
|
176 * Sets the pattern for the host.
|
Chris@0
|
177 *
|
Chris@0
|
178 * This method implements a fluent interface.
|
Chris@0
|
179 *
|
Chris@0
|
180 * @param string $pattern The host pattern
|
Chris@0
|
181 *
|
Chris@0
|
182 * @return $this
|
Chris@0
|
183 */
|
Chris@0
|
184 public function setHost($pattern)
|
Chris@0
|
185 {
|
Chris@0
|
186 $this->host = (string) $pattern;
|
Chris@0
|
187 $this->compiled = null;
|
Chris@0
|
188
|
Chris@0
|
189 return $this;
|
Chris@0
|
190 }
|
Chris@0
|
191
|
Chris@0
|
192 /**
|
Chris@0
|
193 * Returns the lowercased schemes this route is restricted to.
|
Chris@0
|
194 * So an empty array means that any scheme is allowed.
|
Chris@0
|
195 *
|
Chris@0
|
196 * @return array The schemes
|
Chris@0
|
197 */
|
Chris@0
|
198 public function getSchemes()
|
Chris@0
|
199 {
|
Chris@0
|
200 return $this->schemes;
|
Chris@0
|
201 }
|
Chris@0
|
202
|
Chris@0
|
203 /**
|
Chris@0
|
204 * Sets the schemes (e.g. 'https') this route is restricted to.
|
Chris@0
|
205 * So an empty array means that any scheme is allowed.
|
Chris@0
|
206 *
|
Chris@0
|
207 * This method implements a fluent interface.
|
Chris@0
|
208 *
|
Chris@0
|
209 * @param string|array $schemes The scheme or an array of schemes
|
Chris@0
|
210 *
|
Chris@0
|
211 * @return $this
|
Chris@0
|
212 */
|
Chris@0
|
213 public function setSchemes($schemes)
|
Chris@0
|
214 {
|
Chris@0
|
215 $this->schemes = array_map('strtolower', (array) $schemes);
|
Chris@0
|
216 $this->compiled = null;
|
Chris@0
|
217
|
Chris@0
|
218 return $this;
|
Chris@0
|
219 }
|
Chris@0
|
220
|
Chris@0
|
221 /**
|
Chris@0
|
222 * Checks if a scheme requirement has been set.
|
Chris@0
|
223 *
|
Chris@0
|
224 * @param string $scheme
|
Chris@0
|
225 *
|
Chris@0
|
226 * @return bool true if the scheme requirement exists, otherwise false
|
Chris@0
|
227 */
|
Chris@0
|
228 public function hasScheme($scheme)
|
Chris@0
|
229 {
|
Chris@0
|
230 return in_array(strtolower($scheme), $this->schemes, true);
|
Chris@0
|
231 }
|
Chris@0
|
232
|
Chris@0
|
233 /**
|
Chris@0
|
234 * Returns the uppercased HTTP methods this route is restricted to.
|
Chris@0
|
235 * So an empty array means that any method is allowed.
|
Chris@0
|
236 *
|
Chris@0
|
237 * @return array The methods
|
Chris@0
|
238 */
|
Chris@0
|
239 public function getMethods()
|
Chris@0
|
240 {
|
Chris@0
|
241 return $this->methods;
|
Chris@0
|
242 }
|
Chris@0
|
243
|
Chris@0
|
244 /**
|
Chris@0
|
245 * Sets the HTTP methods (e.g. 'POST') this route is restricted to.
|
Chris@0
|
246 * So an empty array means that any method is allowed.
|
Chris@0
|
247 *
|
Chris@0
|
248 * This method implements a fluent interface.
|
Chris@0
|
249 *
|
Chris@0
|
250 * @param string|array $methods The method or an array of methods
|
Chris@0
|
251 *
|
Chris@0
|
252 * @return $this
|
Chris@0
|
253 */
|
Chris@0
|
254 public function setMethods($methods)
|
Chris@0
|
255 {
|
Chris@0
|
256 $this->methods = array_map('strtoupper', (array) $methods);
|
Chris@0
|
257 $this->compiled = null;
|
Chris@0
|
258
|
Chris@0
|
259 return $this;
|
Chris@0
|
260 }
|
Chris@0
|
261
|
Chris@0
|
262 /**
|
Chris@0
|
263 * Returns the options.
|
Chris@0
|
264 *
|
Chris@0
|
265 * @return array The options
|
Chris@0
|
266 */
|
Chris@0
|
267 public function getOptions()
|
Chris@0
|
268 {
|
Chris@0
|
269 return $this->options;
|
Chris@0
|
270 }
|
Chris@0
|
271
|
Chris@0
|
272 /**
|
Chris@0
|
273 * Sets the options.
|
Chris@0
|
274 *
|
Chris@0
|
275 * This method implements a fluent interface.
|
Chris@0
|
276 *
|
Chris@0
|
277 * @param array $options The options
|
Chris@0
|
278 *
|
Chris@0
|
279 * @return $this
|
Chris@0
|
280 */
|
Chris@0
|
281 public function setOptions(array $options)
|
Chris@0
|
282 {
|
Chris@0
|
283 $this->options = array(
|
Chris@0
|
284 'compiler_class' => 'Symfony\\Component\\Routing\\RouteCompiler',
|
Chris@0
|
285 );
|
Chris@0
|
286
|
Chris@0
|
287 return $this->addOptions($options);
|
Chris@0
|
288 }
|
Chris@0
|
289
|
Chris@0
|
290 /**
|
Chris@0
|
291 * Adds options.
|
Chris@0
|
292 *
|
Chris@0
|
293 * This method implements a fluent interface.
|
Chris@0
|
294 *
|
Chris@0
|
295 * @param array $options The options
|
Chris@0
|
296 *
|
Chris@0
|
297 * @return $this
|
Chris@0
|
298 */
|
Chris@0
|
299 public function addOptions(array $options)
|
Chris@0
|
300 {
|
Chris@0
|
301 foreach ($options as $name => $option) {
|
Chris@0
|
302 $this->options[$name] = $option;
|
Chris@0
|
303 }
|
Chris@0
|
304 $this->compiled = null;
|
Chris@0
|
305
|
Chris@0
|
306 return $this;
|
Chris@0
|
307 }
|
Chris@0
|
308
|
Chris@0
|
309 /**
|
Chris@0
|
310 * Sets an option value.
|
Chris@0
|
311 *
|
Chris@0
|
312 * This method implements a fluent interface.
|
Chris@0
|
313 *
|
Chris@0
|
314 * @param string $name An option name
|
Chris@0
|
315 * @param mixed $value The option value
|
Chris@0
|
316 *
|
Chris@0
|
317 * @return $this
|
Chris@0
|
318 */
|
Chris@0
|
319 public function setOption($name, $value)
|
Chris@0
|
320 {
|
Chris@0
|
321 $this->options[$name] = $value;
|
Chris@0
|
322 $this->compiled = null;
|
Chris@0
|
323
|
Chris@0
|
324 return $this;
|
Chris@0
|
325 }
|
Chris@0
|
326
|
Chris@0
|
327 /**
|
Chris@0
|
328 * Get an option value.
|
Chris@0
|
329 *
|
Chris@0
|
330 * @param string $name An option name
|
Chris@0
|
331 *
|
Chris@0
|
332 * @return mixed The option value or null when not given
|
Chris@0
|
333 */
|
Chris@0
|
334 public function getOption($name)
|
Chris@0
|
335 {
|
Chris@0
|
336 return isset($this->options[$name]) ? $this->options[$name] : null;
|
Chris@0
|
337 }
|
Chris@0
|
338
|
Chris@0
|
339 /**
|
Chris@0
|
340 * Checks if an option has been set.
|
Chris@0
|
341 *
|
Chris@0
|
342 * @param string $name An option name
|
Chris@0
|
343 *
|
Chris@0
|
344 * @return bool true if the option is set, false otherwise
|
Chris@0
|
345 */
|
Chris@0
|
346 public function hasOption($name)
|
Chris@0
|
347 {
|
Chris@0
|
348 return array_key_exists($name, $this->options);
|
Chris@0
|
349 }
|
Chris@0
|
350
|
Chris@0
|
351 /**
|
Chris@0
|
352 * Returns the defaults.
|
Chris@0
|
353 *
|
Chris@0
|
354 * @return array The defaults
|
Chris@0
|
355 */
|
Chris@0
|
356 public function getDefaults()
|
Chris@0
|
357 {
|
Chris@0
|
358 return $this->defaults;
|
Chris@0
|
359 }
|
Chris@0
|
360
|
Chris@0
|
361 /**
|
Chris@0
|
362 * Sets the defaults.
|
Chris@0
|
363 *
|
Chris@0
|
364 * This method implements a fluent interface.
|
Chris@0
|
365 *
|
Chris@0
|
366 * @param array $defaults The defaults
|
Chris@0
|
367 *
|
Chris@0
|
368 * @return $this
|
Chris@0
|
369 */
|
Chris@0
|
370 public function setDefaults(array $defaults)
|
Chris@0
|
371 {
|
Chris@0
|
372 $this->defaults = array();
|
Chris@0
|
373
|
Chris@0
|
374 return $this->addDefaults($defaults);
|
Chris@0
|
375 }
|
Chris@0
|
376
|
Chris@0
|
377 /**
|
Chris@0
|
378 * Adds defaults.
|
Chris@0
|
379 *
|
Chris@0
|
380 * This method implements a fluent interface.
|
Chris@0
|
381 *
|
Chris@0
|
382 * @param array $defaults The defaults
|
Chris@0
|
383 *
|
Chris@0
|
384 * @return $this
|
Chris@0
|
385 */
|
Chris@0
|
386 public function addDefaults(array $defaults)
|
Chris@0
|
387 {
|
Chris@0
|
388 foreach ($defaults as $name => $default) {
|
Chris@0
|
389 $this->defaults[$name] = $default;
|
Chris@0
|
390 }
|
Chris@0
|
391 $this->compiled = null;
|
Chris@0
|
392
|
Chris@0
|
393 return $this;
|
Chris@0
|
394 }
|
Chris@0
|
395
|
Chris@0
|
396 /**
|
Chris@0
|
397 * Gets a default value.
|
Chris@0
|
398 *
|
Chris@0
|
399 * @param string $name A variable name
|
Chris@0
|
400 *
|
Chris@0
|
401 * @return mixed The default value or null when not given
|
Chris@0
|
402 */
|
Chris@0
|
403 public function getDefault($name)
|
Chris@0
|
404 {
|
Chris@0
|
405 return isset($this->defaults[$name]) ? $this->defaults[$name] : null;
|
Chris@0
|
406 }
|
Chris@0
|
407
|
Chris@0
|
408 /**
|
Chris@0
|
409 * Checks if a default value is set for the given variable.
|
Chris@0
|
410 *
|
Chris@0
|
411 * @param string $name A variable name
|
Chris@0
|
412 *
|
Chris@0
|
413 * @return bool true if the default value is set, false otherwise
|
Chris@0
|
414 */
|
Chris@0
|
415 public function hasDefault($name)
|
Chris@0
|
416 {
|
Chris@0
|
417 return array_key_exists($name, $this->defaults);
|
Chris@0
|
418 }
|
Chris@0
|
419
|
Chris@0
|
420 /**
|
Chris@0
|
421 * Sets a default value.
|
Chris@0
|
422 *
|
Chris@0
|
423 * @param string $name A variable name
|
Chris@0
|
424 * @param mixed $default The default value
|
Chris@0
|
425 *
|
Chris@0
|
426 * @return $this
|
Chris@0
|
427 */
|
Chris@0
|
428 public function setDefault($name, $default)
|
Chris@0
|
429 {
|
Chris@0
|
430 $this->defaults[$name] = $default;
|
Chris@0
|
431 $this->compiled = null;
|
Chris@0
|
432
|
Chris@0
|
433 return $this;
|
Chris@0
|
434 }
|
Chris@0
|
435
|
Chris@0
|
436 /**
|
Chris@0
|
437 * Returns the requirements.
|
Chris@0
|
438 *
|
Chris@0
|
439 * @return array The requirements
|
Chris@0
|
440 */
|
Chris@0
|
441 public function getRequirements()
|
Chris@0
|
442 {
|
Chris@0
|
443 return $this->requirements;
|
Chris@0
|
444 }
|
Chris@0
|
445
|
Chris@0
|
446 /**
|
Chris@0
|
447 * Sets the requirements.
|
Chris@0
|
448 *
|
Chris@0
|
449 * This method implements a fluent interface.
|
Chris@0
|
450 *
|
Chris@0
|
451 * @param array $requirements The requirements
|
Chris@0
|
452 *
|
Chris@0
|
453 * @return $this
|
Chris@0
|
454 */
|
Chris@0
|
455 public function setRequirements(array $requirements)
|
Chris@0
|
456 {
|
Chris@0
|
457 $this->requirements = array();
|
Chris@0
|
458
|
Chris@0
|
459 return $this->addRequirements($requirements);
|
Chris@0
|
460 }
|
Chris@0
|
461
|
Chris@0
|
462 /**
|
Chris@0
|
463 * Adds requirements.
|
Chris@0
|
464 *
|
Chris@0
|
465 * This method implements a fluent interface.
|
Chris@0
|
466 *
|
Chris@0
|
467 * @param array $requirements The requirements
|
Chris@0
|
468 *
|
Chris@0
|
469 * @return $this
|
Chris@0
|
470 */
|
Chris@0
|
471 public function addRequirements(array $requirements)
|
Chris@0
|
472 {
|
Chris@0
|
473 foreach ($requirements as $key => $regex) {
|
Chris@0
|
474 $this->requirements[$key] = $this->sanitizeRequirement($key, $regex);
|
Chris@0
|
475 }
|
Chris@0
|
476 $this->compiled = null;
|
Chris@0
|
477
|
Chris@0
|
478 return $this;
|
Chris@0
|
479 }
|
Chris@0
|
480
|
Chris@0
|
481 /**
|
Chris@0
|
482 * Returns the requirement for the given key.
|
Chris@0
|
483 *
|
Chris@0
|
484 * @param string $key The key
|
Chris@0
|
485 *
|
Chris@0
|
486 * @return string|null The regex or null when not given
|
Chris@0
|
487 */
|
Chris@0
|
488 public function getRequirement($key)
|
Chris@0
|
489 {
|
Chris@0
|
490 return isset($this->requirements[$key]) ? $this->requirements[$key] : null;
|
Chris@0
|
491 }
|
Chris@0
|
492
|
Chris@0
|
493 /**
|
Chris@0
|
494 * Checks if a requirement is set for the given key.
|
Chris@0
|
495 *
|
Chris@0
|
496 * @param string $key A variable name
|
Chris@0
|
497 *
|
Chris@0
|
498 * @return bool true if a requirement is specified, false otherwise
|
Chris@0
|
499 */
|
Chris@0
|
500 public function hasRequirement($key)
|
Chris@0
|
501 {
|
Chris@0
|
502 return array_key_exists($key, $this->requirements);
|
Chris@0
|
503 }
|
Chris@0
|
504
|
Chris@0
|
505 /**
|
Chris@0
|
506 * Sets a requirement for the given key.
|
Chris@0
|
507 *
|
Chris@0
|
508 * @param string $key The key
|
Chris@0
|
509 * @param string $regex The regex
|
Chris@0
|
510 *
|
Chris@0
|
511 * @return $this
|
Chris@0
|
512 */
|
Chris@0
|
513 public function setRequirement($key, $regex)
|
Chris@0
|
514 {
|
Chris@0
|
515 $this->requirements[$key] = $this->sanitizeRequirement($key, $regex);
|
Chris@0
|
516 $this->compiled = null;
|
Chris@0
|
517
|
Chris@0
|
518 return $this;
|
Chris@0
|
519 }
|
Chris@0
|
520
|
Chris@0
|
521 /**
|
Chris@0
|
522 * Returns the condition.
|
Chris@0
|
523 *
|
Chris@0
|
524 * @return string The condition
|
Chris@0
|
525 */
|
Chris@0
|
526 public function getCondition()
|
Chris@0
|
527 {
|
Chris@0
|
528 return $this->condition;
|
Chris@0
|
529 }
|
Chris@0
|
530
|
Chris@0
|
531 /**
|
Chris@0
|
532 * Sets the condition.
|
Chris@0
|
533 *
|
Chris@0
|
534 * This method implements a fluent interface.
|
Chris@0
|
535 *
|
Chris@0
|
536 * @param string $condition The condition
|
Chris@0
|
537 *
|
Chris@0
|
538 * @return $this
|
Chris@0
|
539 */
|
Chris@0
|
540 public function setCondition($condition)
|
Chris@0
|
541 {
|
Chris@0
|
542 $this->condition = (string) $condition;
|
Chris@0
|
543 $this->compiled = null;
|
Chris@0
|
544
|
Chris@0
|
545 return $this;
|
Chris@0
|
546 }
|
Chris@0
|
547
|
Chris@0
|
548 /**
|
Chris@0
|
549 * Compiles the route.
|
Chris@0
|
550 *
|
Chris@0
|
551 * @return CompiledRoute A CompiledRoute instance
|
Chris@0
|
552 *
|
Chris@0
|
553 * @throws \LogicException If the Route cannot be compiled because the
|
Chris@0
|
554 * path or host pattern is invalid
|
Chris@0
|
555 *
|
Chris@0
|
556 * @see RouteCompiler which is responsible for the compilation process
|
Chris@0
|
557 */
|
Chris@0
|
558 public function compile()
|
Chris@0
|
559 {
|
Chris@0
|
560 if (null !== $this->compiled) {
|
Chris@0
|
561 return $this->compiled;
|
Chris@0
|
562 }
|
Chris@0
|
563
|
Chris@0
|
564 $class = $this->getOption('compiler_class');
|
Chris@0
|
565
|
Chris@0
|
566 return $this->compiled = $class::compile($this);
|
Chris@0
|
567 }
|
Chris@0
|
568
|
Chris@0
|
569 private function sanitizeRequirement($key, $regex)
|
Chris@0
|
570 {
|
Chris@0
|
571 if (!is_string($regex)) {
|
Chris@0
|
572 throw new \InvalidArgumentException(sprintf('Routing requirement for "%s" must be a string.', $key));
|
Chris@0
|
573 }
|
Chris@0
|
574
|
Chris@0
|
575 if ('' !== $regex && '^' === $regex[0]) {
|
Chris@0
|
576 $regex = (string) substr($regex, 1); // returns false for a single character
|
Chris@0
|
577 }
|
Chris@0
|
578
|
Chris@0
|
579 if ('$' === substr($regex, -1)) {
|
Chris@0
|
580 $regex = substr($regex, 0, -1);
|
Chris@0
|
581 }
|
Chris@0
|
582
|
Chris@0
|
583 if ('' === $regex) {
|
Chris@0
|
584 throw new \InvalidArgumentException(sprintf('Routing requirement for "%s" cannot be empty.', $key));
|
Chris@0
|
585 }
|
Chris@0
|
586
|
Chris@0
|
587 return $regex;
|
Chris@0
|
588 }
|
Chris@0
|
589 }
|