mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-07 15:12:48 +08:00
支持分组MISS路由
This commit is contained in:
@@ -497,11 +497,12 @@ class Route
|
|||||||
* @param string $route 路由地址
|
* @param string $route 路由地址
|
||||||
* @param string $method 请求类型
|
* @param string $method 请求类型
|
||||||
* @param array $option 路由参数
|
* @param array $option 路由参数
|
||||||
|
* @param string $group 路由分组
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public static function miss($route, $method = '*', $option = [])
|
public static function miss($route, $method = '*', $option = [], $group = '')
|
||||||
{
|
{
|
||||||
self::rule('__miss__', $route, $method, $option, []);
|
self::rule('__miss__', $route, $method, $option, [], $group);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -678,11 +679,6 @@ class Route
|
|||||||
|
|
||||||
// 路由规则检测
|
// 路由规则检测
|
||||||
if (!empty($rules)) {
|
if (!empty($rules)) {
|
||||||
if (isset($rules['__miss__'])) {
|
|
||||||
// 指定未匹配路由的处理
|
|
||||||
$miss = $rules['__miss__'];
|
|
||||||
unset($rules['__miss__']);
|
|
||||||
}
|
|
||||||
foreach ($rules as $rule => $val) {
|
foreach ($rules as $rule => $val) {
|
||||||
$option = isset($val['option']) ? $val['option'] : [];
|
$option = isset($val['option']) ? $val['option'] : [];
|
||||||
$pattern = isset($val['pattern']) ? $val['pattern'] : [];
|
$pattern = isset($val['pattern']) ? $val['pattern'] : [];
|
||||||
@@ -691,7 +687,11 @@ class Route
|
|||||||
if (!self::checkOption($option, $url, $request)) {
|
if (!self::checkOption($option, $url, $request)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if ('__miss__' == $rule) {
|
||||||
|
// 指定分组MISS路由
|
||||||
|
$miss = $val['route'];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (!empty($val['routes'])) {
|
if (!empty($val['routes'])) {
|
||||||
// 分组路由
|
// 分组路由
|
||||||
if (($pos = strpos($rule, ':')) || ($pos = strpos($rule, '<'))) {
|
if (($pos = strpos($rule, ':')) || ($pos = strpos($rule, '<'))) {
|
||||||
@@ -702,13 +702,12 @@ class Route
|
|||||||
if (0 !== strpos($url, $str)) {
|
if (0 !== strpos($url, $str)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
$missGroup = false;
|
||||||
// 匹配到路由分组
|
// 匹配到路由分组
|
||||||
foreach ($val['routes'] as $key => $route) {
|
foreach ($val['routes'] as $key => $route) {
|
||||||
if (is_numeric($key)) {
|
if (is_numeric($key)) {
|
||||||
$key = array_shift($route);
|
$key = array_shift($route);
|
||||||
}
|
}
|
||||||
|
|
||||||
$key = $rule . ($key ? '/' . ltrim($key, '/') : '');
|
|
||||||
// 检查规则路由
|
// 检查规则路由
|
||||||
if (is_array($route)) {
|
if (is_array($route)) {
|
||||||
$option1 = $route[1];
|
$option1 = $route[1];
|
||||||
@@ -720,12 +719,27 @@ class Route
|
|||||||
$route = $route[0];
|
$route = $route[0];
|
||||||
$option = array_merge($option, $option1);
|
$option = array_merge($option, $option1);
|
||||||
}
|
}
|
||||||
|
if ('__miss__' == $key) {
|
||||||
|
// 指定分组MISS路由
|
||||||
|
$missGroup = $route;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$key = $rule . ($key ? '/' . ltrim($key, '/') : '');
|
||||||
$result = self::checkRule($key, $route, $url, $pattern, $option);
|
$result = self::checkRule($key, $route, $url, $pattern, $option);
|
||||||
if (false !== $result) {
|
if (false !== $result) {
|
||||||
$request->route(['rule' => $key, 'route' => $route, 'pattern' => $pattern, 'option' => $option]);
|
$request->route(['rule' => $key, 'route' => $route, 'pattern' => $pattern, 'option' => $option]);
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ($missGroup) {
|
||||||
|
// 未匹配所有路由的路由规则处理
|
||||||
|
if ($missGroup instanceof \Closure) {
|
||||||
|
// 执行闭包
|
||||||
|
return ['type' => 'function', 'function' => $missGroup, 'params' => []];
|
||||||
|
} else {
|
||||||
|
return self::parseRule('', $missGroup, $url, []);
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (is_numeric($rule)) {
|
if (is_numeric($rule)) {
|
||||||
$rule = array_shift($val);
|
$rule = array_shift($val);
|
||||||
@@ -742,11 +756,11 @@ class Route
|
|||||||
}
|
}
|
||||||
if (isset($miss)) {
|
if (isset($miss)) {
|
||||||
// 未匹配所有路由的路由规则处理
|
// 未匹配所有路由的路由规则处理
|
||||||
if ($miss['route'] instanceof \Closure) {
|
if ($miss instanceof \Closure) {
|
||||||
// 执行闭包
|
// 执行闭包
|
||||||
return ['type' => 'function', 'function' => $miss['route'], 'params' => []];
|
return ['type' => 'function', 'function' => $miss, 'params' => []];
|
||||||
} elseif (self::checkOption($miss['option'], $url, $request)) {
|
} else {
|
||||||
return self::parseRule('', $miss['route'], $url, []);
|
return self::parseRule('', $miss, $url, []);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user