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

View File

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