Route类增加auto方法 支持注册一个自动解析URL的路由

This commit is contained in:
thinkphp
2016-07-30 22:28:05 +08:00
parent 62b8d6039c
commit 5715d3cdb9

View File

@@ -95,10 +95,10 @@ class Route
{
if (is_array($domain)) {
foreach ($domain as $key => $item) {
self::$rules['domain'][$key][] = [$item, $option, $pattern];
self::$rules['domain'][$key] = [$item, $option, $pattern];
}
} else {
self::$rules['domain'][$domain][] = [$rule, $option, $pattern];
self::$rules['domain'][$domain] = [$rule, $option, $pattern];
}
}
@@ -598,6 +598,17 @@ class Route
self::rule('__miss__', $route, $method, $option, []);
}
/**
* 注册一个自动解析的URL路由
* @access public
* @param string $route 路由地址
* @return void
*/
public static function auto($route)
{
self::rule('__auto__', $route, '*', [], []);
}
/**
* 获取或者批量设置路由定义
* @access public
@@ -670,8 +681,7 @@ class Route
}
if (!empty($item)) {
self::$domain = true;
foreach ($item as $val) {
list($rule, $option, $pattern) = $val;
list($rule, $option, $pattern) = $item;
// 子域名部署规则
if ($rule instanceof \Closure) {
// 执行闭包
@@ -719,7 +729,6 @@ class Route
}
}
}
}
/**
* 检测URL路由
@@ -773,7 +782,7 @@ class Route
// 路由规则检测
if (!empty($rules)) {
return self::checkRoute($request, $rules, $url);
return self::checkRoute($request, $rules, $url, $depr);
}
return false;
}
@@ -784,10 +793,11 @@ class Route
* @param Request $request
* @param array $rules 路由规则
* @param string $url URL地址
* @param string $depr URL分割符
* @param string $group 路由分组名
* @return mixed
*/
private static function checkRoute($request, $rules, $url, $group = '')
private static function checkRoute($request, $rules, $url, $depr = '/', $group = '')
{
foreach ($rules as $key => $item) {
if (true === $item) {
@@ -818,14 +828,15 @@ class Route
continue;
}
$result = self::checkRoute($request, $rule, $url, $key);
$result = self::checkRoute($request, $rule, $url, $depr, $key);
if (false !== $result) {
return $result;
}
} elseif ($route) {
if ('__miss__' == $rule) {
// 指定MISS路由
$miss = $item;
if ('__miss__' == $rule || '__auto__' == $rule) {
// 指定特殊路由
$var = trim($rule, '__');
${$var} = $item;
continue;
}
if ($group) {
@@ -837,7 +848,10 @@ class Route
}
}
}
if (isset($miss)) {
if (isset($auto)) {
// 自动解析URL地址
return self::parseUrl($auto['route'] . '/' . $url, $depr);
} elseif (isset($miss)) {
// 未匹配所有路由的路由规则处理
return self::parseRule('', $miss['route'], $url, $miss['option']);
}