1: <?php
2: /**
3: * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
4: * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
5: *
6: * Licensed under The MIT License
7: * For full copyright and license information, please see the LICENSE.txt
8: * Redistributions of files must retain the above copyright notice.
9: *
10: * @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
11: * @link https://cakephp.org CakePHP(tm) Project
12: * @since 1.3.0
13: * @license https://opensource.org/licenses/mit-license.php MIT License
14: */
15: namespace Cake\Routing\Route;
16:
17: /**
18: * Plugin short route, that copies the plugin param to the controller parameters
19: * It is used for supporting /:plugin routes.
20: */
21: class PluginShortRoute extends InflectedRoute
22: {
23: /**
24: * Parses a string URL into an array. If a plugin key is found, it will be copied to the
25: * controller parameter.
26: *
27: * @param string $url The URL to parse
28: * @param string $method The HTTP method
29: * @return array|false An array of request parameters, or boolean false on failure.
30: */
31: public function parse($url, $method = '')
32: {
33: $params = parent::parse($url, $method);
34: if (!$params) {
35: return false;
36: }
37: $params['controller'] = $params['plugin'];
38:
39: return $params;
40: }
41:
42: /**
43: * Reverses route plugin shortcut URLs. If the plugin and controller
44: * are not the same the match is an auto fail.
45: *
46: * @param array $url Array of parameters to convert to a string.
47: * @param array $context An array of the current request context.
48: * Contains information such as the current host, scheme, port, and base
49: * directory.
50: * @return string|false Either a string URL for the parameters if they match or false.
51: */
52: public function match(array $url, array $context = [])
53: {
54: if (isset($url['controller'], $url['plugin']) && $url['plugin'] !== $url['controller']) {
55: return false;
56: }
57: $this->defaults['controller'] = $url['controller'];
58: $result = parent::match($url, $context);
59: unset($this->defaults['controller']);
60:
61: return $result;
62: }
63: }
64: