mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2025-02-07 12:36:25 +00:00
Adding Router::connectDefaults(). Allows the developer to disable Router's automatic generation of routes.
This commit is contained in:
parent
52264cb61c
commit
636d944e70
1 changed files with 22 additions and 98 deletions
|
@ -156,6 +156,14 @@ class Router {
|
||||||
*/
|
*/
|
||||||
var $__defaultsMapped = false;
|
var $__defaultsMapped = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Keeps track of whether the connection of default routes is enabled or disabled.
|
||||||
|
*
|
||||||
|
* @var boolean
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $__connectDefaults = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor for Router.
|
* Constructor for Router.
|
||||||
* Builds __prefixes
|
* Builds __prefixes
|
||||||
|
@ -304,6 +312,19 @@ class Router {
|
||||||
return $_this->named;
|
return $_this->named;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tell router to connect or not connect the default routes.
|
||||||
|
* If default routes are disabled all automatic route generation will be disabled
|
||||||
|
* and you will need to manually configure all the routes you want.
|
||||||
|
*
|
||||||
|
* @param boolean $connect Set to true or false depending on whether you want or don't want default routes.
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function connectDefaults($connect = true) {
|
||||||
|
$_this =& Router::getInstance();
|
||||||
|
$_this->__connectDefaults = $connect;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates REST resource routes for the given controller(s)
|
* Creates REST resource routes for the given controller(s)
|
||||||
*
|
*
|
||||||
|
@ -340,79 +361,6 @@ class Router {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Builds a route regular expression
|
|
||||||
*
|
|
||||||
* @param string $route An empty string, or a route string "/"
|
|
||||||
* @param array $default NULL or an array describing the default route
|
|
||||||
* @param array $params An array matching the named elements in the route to regular expressions which that element should match.
|
|
||||||
* @return array
|
|
||||||
* @see routes
|
|
||||||
* @access public
|
|
||||||
* @static
|
|
||||||
*/
|
|
||||||
function writeRoute($route, $default, $params) {
|
|
||||||
if (empty($route) || ($route === '/')) {
|
|
||||||
return array('/^[\/]*$/', array());
|
|
||||||
}
|
|
||||||
$names = array();
|
|
||||||
$elements = explode('/', $route);
|
|
||||||
|
|
||||||
foreach ($elements as $element) {
|
|
||||||
if (empty($element)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$q = null;
|
|
||||||
$element = trim($element);
|
|
||||||
$namedParam = strpos($element, ':') !== false;
|
|
||||||
|
|
||||||
if ($namedParam && preg_match('/^:([^:]+)$/', $element, $r)) {
|
|
||||||
if (isset($params[$r[1]])) {
|
|
||||||
if ($r[1] != 'plugin' && array_key_exists($r[1], $default)) {
|
|
||||||
$q = '?';
|
|
||||||
}
|
|
||||||
$parsed[] = '(?:/(' . $params[$r[1]] . ')' . $q . ')' . $q;
|
|
||||||
} else {
|
|
||||||
$parsed[] = '(?:/([^\/]+))?';
|
|
||||||
}
|
|
||||||
$names[] = $r[1];
|
|
||||||
} elseif ($element === '*') {
|
|
||||||
$parsed[] = '(?:/(.*))?';
|
|
||||||
} else if ($namedParam && preg_match_all('/(?!\\\\):([a-z_0-9]+)/i', $element, $matches)) {
|
|
||||||
$matchCount = count($matches[1]);
|
|
||||||
|
|
||||||
foreach ($matches[1] as $i => $name) {
|
|
||||||
$pos = strpos($element, ':' . $name);
|
|
||||||
$before = substr($element, 0, $pos);
|
|
||||||
$element = substr($element, $pos + strlen($name) + 1);
|
|
||||||
$after = null;
|
|
||||||
|
|
||||||
if ($i + 1 === $matchCount && $element) {
|
|
||||||
$after = preg_quote($element);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($i === 0) {
|
|
||||||
$before = '/' . $before;
|
|
||||||
}
|
|
||||||
$before = preg_quote($before, '#');
|
|
||||||
|
|
||||||
if (isset($params[$name])) {
|
|
||||||
if (isset($default[$name]) && $name != 'plugin') {
|
|
||||||
$q = '?';
|
|
||||||
}
|
|
||||||
$parsed[] = '(?:' . $before . '(' . $params[$name] . ')' . $q . $after . ')' . $q;
|
|
||||||
} else {
|
|
||||||
$parsed[] = '(?:' . $before . '([^\/]+)' . $after . ')?';
|
|
||||||
}
|
|
||||||
$names[] = $name;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$parsed[] = '/' . $element;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return array('#^' . implode('', $parsed) . '[\/]*$#', $names);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the list of prefixes used in connected routes
|
* Returns the list of prefixes used in connected routes
|
||||||
*
|
*
|
||||||
|
@ -436,7 +384,7 @@ class Router {
|
||||||
*/
|
*/
|
||||||
function parse($url) {
|
function parse($url) {
|
||||||
$_this =& Router::getInstance();
|
$_this =& Router::getInstance();
|
||||||
if (!$_this->__defaultsMapped) {
|
if (!$_this->__defaultsMapped && $_this->__connectDefaults) {
|
||||||
$_this->__connectDefaultRoutes();
|
$_this->__connectDefaultRoutes();
|
||||||
}
|
}
|
||||||
$out = array('pass' => array(), 'named' => array());
|
$out = array('pass' => array(), 'named' => array());
|
||||||
|
@ -521,26 +469,6 @@ class Router {
|
||||||
return $out;
|
return $out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Compiles a route by numeric key and returns the compiled expression, replacing
|
|
||||||
* the existing uncompiled route. Do not call statically.
|
|
||||||
*
|
|
||||||
* @param integer $i
|
|
||||||
* @return array Returns an array containing the compiled route
|
|
||||||
* @access public
|
|
||||||
*/
|
|
||||||
function compile($i) {
|
|
||||||
$route = $this->routes[$i];
|
|
||||||
|
|
||||||
list($pattern, $names) = $this->writeRoute($route[0], $route[1], $route[2]);
|
|
||||||
$this->routes[$i] = array(
|
|
||||||
$route[0], $pattern, $names,
|
|
||||||
array_merge(array('plugin' => null, 'controller' => null), (array)$route[1]),
|
|
||||||
$route[2]
|
|
||||||
);
|
|
||||||
return $this->routes[$i];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses a file extension out of a URL, if Router::parseExtensions() is enabled.
|
* Parses a file extension out of a URL, if Router::parseExtensions() is enabled.
|
||||||
*
|
*
|
||||||
|
@ -582,10 +510,6 @@ class Router {
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
function __connectDefaultRoutes() {
|
function __connectDefaultRoutes() {
|
||||||
if ($this->__defaultsMapped) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($plugins = App::objects('plugin')) {
|
if ($plugins = App::objects('plugin')) {
|
||||||
foreach ($plugins as $key => $value) {
|
foreach ($plugins as $key => $value) {
|
||||||
$plugins[$key] = Inflector::underscore($value);
|
$plugins[$key] = Inflector::underscore($value);
|
||||||
|
|
Loading…
Add table
Reference in a new issue