改进Route类的路由标识存储 修正路由缓存后的URL生成

This commit is contained in:
thinkphp
2016-09-13 18:54:03 +08:00
parent 79bdc2fd9a
commit 9c227e9e8e

View File

@@ -32,10 +32,10 @@ class Route
'HEAD' => [], 'HEAD' => [],
'OPTIONS' => [], 'OPTIONS' => [],
'*' => [], '*' => [],
'map' => [],
'alias' => [], 'alias' => [],
'domain' => [], 'domain' => [],
'pattern' => [], 'pattern' => [],
'name' => [],
]; ];
// REST路由操作方法定义 // REST路由操作方法定义
@@ -63,8 +63,6 @@ class Route
private static $bind = []; private static $bind = [];
// 当前分组信息 // 当前分组信息
private static $group = []; private static $group = [];
// 路由命名标识用于快速URL生成
private static $name = [];
// 当前子域名绑定 // 当前子域名绑定
private static $domainBind; private static $domainBind;
private static $domainRule; private static $domainRule;
@@ -137,19 +135,22 @@ class Route
} }
/** /**
* 设置路由绑定 * 设置或者获取路由标识
* @access public * @access public
* @param string|array $name 路由命名标识 数组表示批量设置 * @param string|array $name 路由命名标识 数组表示批量设置
* @param array $value 路由地址及变量信息
* @return array * @return array
*/ */
public static function name($name = '') public static function name($name = '', $value = null)
{ {
if (is_array($name)) { if (is_array($name)) {
return self::$name = $name; return self::$rules['name'] = $name;
} elseif ('' === $name) { } elseif ('' === $name) {
return self::$name; return self::$rules['name'];
} elseif (!is_null($value)) {
self::$rules['name'][$name][] = $value;
} else { } else {
return isset(self::$name[$name]) ? self::$name[$name] : null; return isset(self::$rules['name'][$name]) ? self::$rules['name'][$name] : null;
} }
} }
@@ -304,7 +305,7 @@ class Route
} }
$vars = self::parseVar($rule); $vars = self::parseVar($rule);
if (isset($name)) { if (isset($name)) {
self::$name[$name][] = [$rule, $vars, self::$domain]; self::name($name, [$rule, $vars, self::$domain]);
} }
if ($group) { if ($group) {
if ('*' != $type) { if ('*' != $type) {
@@ -424,7 +425,7 @@ class Route
$vars = self::parseVar($key); $vars = self::parseVar($key);
$item[] = ['rule' => $key, 'route' => $route, 'var' => $vars, 'option' => $options, 'pattern' => $patterns]; $item[] = ['rule' => $key, 'route' => $route, 'var' => $vars, 'option' => $options, 'pattern' => $patterns];
// 设置路由标识 // 设置路由标识
self::$name[$route][] = [$key, $vars, self::$domain]; self::name($route, [$key, $vars, self::$domain]);
} }
self::$rules['*'][$name] = ['rule' => $item, 'route' => '', 'var' => [], 'option' => $option, 'pattern' => $pattern]; self::$rules['*'][$name] = ['rule' => $item, 'route' => '', 'var' => [], 'option' => $option, 'pattern' => $pattern];
} }
@@ -683,7 +684,7 @@ class Route
return true === $rules ? self::$rules : self::$rules[$rules]; return true === $rules ? self::$rules : self::$rules[$rules];
} else { } else {
$rules = self::$rules; $rules = self::$rules;
unset($rules['pattern'], $rules['alias'], $rules['domain']); unset($rules['pattern'], $rules['alias'], $rules['domain'], $rules['name']);
return $rules; return $rules;
} }
} }
@@ -1177,7 +1178,7 @@ class Route
self::parseUrlParams(empty($path) ? '' : implode('/', $path)); self::parseUrlParams(empty($path) ? '' : implode('/', $path));
// 封装路由 // 封装路由
$route = [$module, $controller, $action]; $route = [$module, $controller, $action];
if (isset(self::$name[implode($depr, $route)])) { if (isset(self::$rules['name'][implode($depr, $route)])) {
throw new HttpException(404, 'invalid request:' . $url); throw new HttpException(404, 'invalid request:' . $url);
} }
} }