改进Route类的alias方法 改进Url类生成支持路由别名

This commit is contained in:
thinkphp
2016-06-09 09:00:42 +08:00
parent c4edb2e426
commit b50bcd5298
2 changed files with 22 additions and 13 deletions

View File

@@ -449,9 +449,11 @@ class Route
* @param array $option 路由参数 * @param array $option 路由参数
* @return void * @return void
*/ */
public static function alias($rule, $route = '', $option = []) public static function alias($rule = null, $route = '', $option = [])
{ {
if (is_array($rule)) { if (is_null($rule)) {
return self::$alias;
} elseif (is_array($rule)) {
self::$alias = array_merge(self::$alias, $rule); self::$alias = array_merge(self::$alias, $rule);
} else { } else {
self::$alias[$rule] = $option ? [$route, $option] : $route; self::$alias[$rule] = $option ? [$route, $option] : $route;

View File

@@ -264,11 +264,11 @@ class Url
return false; return false;
} }
// 生成路由别名并缓存 // 生成路由映射并缓存
private static function getRouteAlias() private static function getRouteAlias()
{ {
if ($alias = Cache::get('think_route_alias')) { if ($item = Cache::get('think_route_map')) {
return $alias; return $item;
} }
// 获取路由定义 // 获取路由定义
$rules = Route::getRules(); $rules = Route::getRules();
@@ -290,8 +290,8 @@ class Url
list($route, $str) = explode('?', $route, 2); list($route, $str) = explode('?', $route, 2);
parse_str($str, $param); parse_str($str, $param);
} }
$var = self::parseVar($rule . '/' . $key); $var = self::parseVar($rule . '/' . $key);
$alias[$route][] = [$rule . '/' . $key, $var, $param]; $item[$route][] = [$rule . '/' . $key, $var, $param];
} }
} else { } else {
$route = $val['route']; $route = $val['route'];
@@ -304,8 +304,8 @@ class Url
list($route, $str) = explode('?', $route, 2); list($route, $str) = explode('?', $route, 2);
parse_str($str, $param); parse_str($str, $param);
} }
$var = self::parseVar($rule); $var = self::parseVar($rule);
$alias[$route][] = [$rule, $var, $param]; $item[$route][] = [$rule, $var, $param];
} }
} }
@@ -317,10 +317,17 @@ class Url
list($route, $str) = explode('?', $route, 2); list($route, $str) = explode('?', $route, 2);
parse_str($str, $param); parse_str($str, $param);
} }
$alias[$route][] = [$rule, [], $param]; $item[$route][] = [$rule, [], $param];
} }
!APP_DEBUG && Cache::set('think_route_alias', $alias);
return $alias; // 检测路由别名
$alias = Route::alias();
foreach ($alias as $rule => $route) {
$route = is_array($route) ? $route[0] : $route;
$item[$route][] = [$rule, [], []];
}
!APP_DEBUG && Cache::set('think_route_map', $item);
return $item;
} }
// 分析路由规则中的变量 // 分析路由规则中的变量
@@ -363,6 +370,6 @@ class Url
// 清空路由别名缓存 // 清空路由别名缓存
public static function clearAliasCache() public static function clearAliasCache()
{ {
Cache::rm('think_route_alias'); Cache::rm('think_route_map');
} }
} }