修正Route类和Url类对分组路由解析

This commit is contained in:
thinkphp
2016-07-06 16:38:38 +08:00
parent 08bff50a26
commit 054588e517
2 changed files with 29 additions and 13 deletions

View File

@@ -267,9 +267,9 @@ class Route
}
$vars = self::parseVar($rule);
if ($group) {
self::$rules[$type][$group][0][] = [$rule, $route, $vars, $option, $pattern];
self::$rules[$type][$group]['rule'][] = ['rule' => $rule, 'route' => $route, 'var' => $vars, 'option' => $option, 'pattern' => $pattern];
} else {
self::$rules[$type][$rule] = [$rule, $route, $vars, $option, $pattern];
self::$rules[$type][$rule] = ['rule' => $rule, 'route' => $route, 'var' => $vars, 'option' => $option, 'pattern' => $pattern];
}
}
@@ -318,10 +318,10 @@ class Route
self::setGroup($name);
call_user_func_array($routes, []);
self::setGroup(null);
self::$rules[$type][$name][1] = '';
self::$rules[$type][$name][2] = self::parseVar($name);
self::$rules[$type][$name][3] = $option;
self::$rules[$type][$name][4] = $pattern;
self::$rules[$type][$name]['route'] = '';
self::$rules[$type][$name]['var'] = self::parseVar($name);
self::$rules[$type][$name]['option'] = $option;
self::$rules[$type][$name]['pattern'] = $pattern;
} else {
foreach ($routes as $key => $val) {
if (is_numeric($key)) {
@@ -337,7 +337,7 @@ class Route
$vars = self::parseVar($key);
$item[] = [$key, $route, $vars, isset($option1) ? $option1 : $option, isset($pattern1) ? $pattern1 : $pattern];
}
self::$rules[$type][$name] = [$item, '', [], $option, $pattern];
self::$rules[$type][$name] = ['rule' => $item, 'route' => '', 'var' => [], 'option' => $option, 'pattern' => $pattern];
}
} else {
if ($routes instanceof \Closure) {
@@ -702,7 +702,6 @@ class Route
// 获取当前请求类型的路由规则
$rules = self::$rules[$request->method()];
if (!empty(self::$rules['*'])) {
// 合并任意请求的路由规则
$rules = array_merge_recursive(self::$rules['*'], $rules);
@@ -721,7 +720,11 @@ class Route
// 路由规则检测
if (!empty($rules)) {
foreach ($rules as $group => $val) {
list($rule, $route, $vars, $option, $pattern) = $val;
$rule = $val['rule'];
$route = $val['route'];
$vars = $val['var'];
$option = $val['option'];
$pattern = $val['pattern'];
// 参数有效性检查
if (!self::checkOption($option, $url, $request)) {
@@ -745,7 +748,12 @@ class Route
$missGroup = false;
// 匹配到路由分组
foreach ($rule as $key => $item) {
list($key, $route, $vars, $option, $pattern) = $item;
$key = $item['rule'];
$route = $item['route'];
$vars = $item['var'];
$option = $item['option'];
$pattern = $item['pattern'];
// 检查参数有效性
if (!self::checkOption($option, $url, $request)) {
continue;

View File

@@ -267,11 +267,19 @@ class Url
// 获取路由定义
$rules = Route::getRules();
foreach ($rules as $group => $val) {
list($rule, $route, $vars, $option, $pattern) = $val;
$rule = $val['rule'];
$route = $val['route'];
$vars = $val['var'];
$option = $val['option'];
$pattern = $val['pattern'];
if (is_array($rule)) {
foreach ($rule as $key => $val) {
list($key, $route, $var, $option, $pattern) = $val;
$param = [];
$key = $val['rule'];
$route = $val['route'];
$var = $val['var'];
$option = $val['option'];
$pattern = $val['pattern'];
$param = [];
if (is_array($route)) {
$route = implode('\\', $route);
} elseif ($route instanceof \Closure) {