mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-06 15:02:47 +08:00
改进Route类存储结构
This commit is contained in:
@@ -261,24 +261,17 @@ class Url
|
||||
// 生成路由映射并缓存
|
||||
private static function getRouteAlias()
|
||||
{
|
||||
static $item = [];
|
||||
if (!empty($item)) {
|
||||
return $item;
|
||||
}
|
||||
if ($item = Cache::get('think_route_map')) {
|
||||
return $item;
|
||||
}
|
||||
// 获取路由定义
|
||||
$rules = Route::getRules();
|
||||
foreach ($rules as $rule => $val) {
|
||||
if (!empty($val['routes'])) {
|
||||
foreach ($val['routes'] as $key => $route) {
|
||||
if (is_numeric($key)) {
|
||||
$key = array_shift($route);
|
||||
}
|
||||
if (is_array($route)) {
|
||||
$route = $route[0];
|
||||
}
|
||||
foreach ($rules as $group => $val) {
|
||||
list($rule, $route, $vars, $option, $pattern) = $val;
|
||||
if (is_array($rule)) {
|
||||
foreach ($rule as $key => $item) {
|
||||
list($key, $route, $var, $option, $pattern) = $item;
|
||||
|
||||
$param = [];
|
||||
if (is_array($route)) {
|
||||
$route = implode('\\', $route);
|
||||
@@ -288,11 +281,10 @@ class Url
|
||||
list($route, $str) = explode('?', $route, 2);
|
||||
parse_str($str, $param);
|
||||
}
|
||||
$var = self::parseVar($rule . '/' . $key);
|
||||
$item[$route][] = [$rule . '/' . $key, $var, $param];
|
||||
$var = array_merge($vars, $var);
|
||||
$item[$route][] = [$group . '/' . $key, $var, $param];
|
||||
}
|
||||
} else {
|
||||
$route = $val['route'];
|
||||
$param = [];
|
||||
if (is_array($route)) {
|
||||
$route = implode('\\', $route);
|
||||
@@ -302,8 +294,7 @@ class Url
|
||||
list($route, $str) = explode('?', $route, 2);
|
||||
parse_str($str, $param);
|
||||
}
|
||||
$var = self::parseVar($rule);
|
||||
$item[$route][] = [$rule, $var, $param];
|
||||
$item[$route][] = [$rule, $vars, $param];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -328,42 +319,6 @@ class Url
|
||||
return $item;
|
||||
}
|
||||
|
||||
// 分析路由规则中的变量
|
||||
private static function parseVar($rule)
|
||||
{
|
||||
// 提取路由规则中的变量
|
||||
$var = [];
|
||||
foreach (explode('/', $rule) as $val) {
|
||||
$optional = false;
|
||||
if (false !== strpos($val, '<') && preg_match_all('/<(\w+(\??))>/', $val, $matches)) {
|
||||
foreach ($matches[1] as $name) {
|
||||
if (strpos($name, '?')) {
|
||||
$name = substr($name, 0, -1);
|
||||
$optional = true;
|
||||
} else {
|
||||
$optional = false;
|
||||
}
|
||||
$var[$name] = $optional ? 2 : 1;
|
||||
}
|
||||
}
|
||||
|
||||
if ('$' == substr($val, -1, 1)) {
|
||||
$val = substr($val, 0, -1);
|
||||
}
|
||||
if (0 === strpos($val, '[:')) {
|
||||
// 可选参数
|
||||
$optional = true;
|
||||
$val = substr($val, 1, -1);
|
||||
}
|
||||
if (0 === strpos($val, ':')) {
|
||||
// URL变量
|
||||
$name = substr($val, 1);
|
||||
$var[$name] = $optional ? 2 : 1;
|
||||
}
|
||||
}
|
||||
return $var;
|
||||
}
|
||||
|
||||
// 清空路由别名缓存
|
||||
public static function clearAliasCache()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user