mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-06 23:02:48 +08:00
Route类增加auto方法 支持注册一个自动解析URL的路由
This commit is contained in:
@@ -95,10 +95,10 @@ class Route
|
|||||||
{
|
{
|
||||||
if (is_array($domain)) {
|
if (is_array($domain)) {
|
||||||
foreach ($domain as $key => $item) {
|
foreach ($domain as $key => $item) {
|
||||||
self::$rules['domain'][$key][] = [$item, $option, $pattern];
|
self::$rules['domain'][$key] = [$item, $option, $pattern];
|
||||||
}
|
}
|
||||||
} else {
|
} 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, []);
|
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
|
* @access public
|
||||||
@@ -669,53 +680,51 @@ class Route
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!empty($item)) {
|
if (!empty($item)) {
|
||||||
self::$domain = true;
|
self::$domain = true;
|
||||||
foreach ($item as $val) {
|
list($rule, $option, $pattern) = $item;
|
||||||
list($rule, $option, $pattern) = $val;
|
// 子域名部署规则
|
||||||
// 子域名部署规则
|
if ($rule instanceof \Closure) {
|
||||||
if ($rule instanceof \Closure) {
|
// 执行闭包
|
||||||
// 执行闭包
|
$reflect = new \ReflectionFunction($rule);
|
||||||
$reflect = new \ReflectionFunction($rule);
|
self::$bind = $reflect->invokeArgs([]);
|
||||||
self::$bind = $reflect->invokeArgs([]);
|
return;
|
||||||
return;
|
} elseif (is_array($rule)) {
|
||||||
} elseif (is_array($rule)) {
|
// 清空当前路由规则
|
||||||
// 清空当前路由规则
|
self::$rules[$method] = [];
|
||||||
self::$rules[$method] = [];
|
self::$rules['*'] = [];
|
||||||
self::$rules['*'] = [];
|
self::group('', function () use ($rule) {
|
||||||
self::group('', function () use ($rule) {
|
// 动态注册域名的路由规则
|
||||||
// 动态注册域名的路由规则
|
self::registerRules($rule);
|
||||||
self::registerRules($rule);
|
}, $option, $pattern);
|
||||||
}, $option, $pattern);
|
return;
|
||||||
return;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (strpos($rule, '?')) {
|
if (strpos($rule, '?')) {
|
||||||
// 传入其它参数
|
// 传入其它参数
|
||||||
$array = parse_url($rule);
|
$array = parse_url($rule);
|
||||||
$result = $array['path'];
|
$result = $array['path'];
|
||||||
parse_str($array['query'], $params);
|
parse_str($array['query'], $params);
|
||||||
if (isset($panDomain)) {
|
if (isset($panDomain)) {
|
||||||
$pos = array_search('*', $params);
|
$pos = array_search('*', $params);
|
||||||
if (false !== $pos) {
|
if (false !== $pos) {
|
||||||
// 泛域名作为参数
|
// 泛域名作为参数
|
||||||
$params[$pos] = $panDomain;
|
$params[$pos] = $panDomain;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
$_GET = array_merge($_GET, $params);
|
|
||||||
} else {
|
|
||||||
$result = $rule;
|
|
||||||
}
|
}
|
||||||
|
$_GET = array_merge($_GET, $params);
|
||||||
|
} else {
|
||||||
|
$result = $rule;
|
||||||
|
}
|
||||||
|
|
||||||
if (0 === strpos($result, '\\')) {
|
if (0 === strpos($result, '\\')) {
|
||||||
// 绑定到命名空间 例如 \app\index\behavior
|
// 绑定到命名空间 例如 \app\index\behavior
|
||||||
self::$bind = ['type' => 'namespace', 'namespace' => $result];
|
self::$bind = ['type' => 'namespace', 'namespace' => $result];
|
||||||
} elseif (0 === strpos($result, '@')) {
|
} elseif (0 === strpos($result, '@')) {
|
||||||
// 绑定到类 例如 @app\index\controller\User
|
// 绑定到类 例如 @app\index\controller\User
|
||||||
self::$bind = ['type' => 'class', 'class' => substr($result, 1)];
|
self::$bind = ['type' => 'class', 'class' => substr($result, 1)];
|
||||||
} else {
|
} else {
|
||||||
// 绑定到模块/控制器 例如 index/user
|
// 绑定到模块/控制器 例如 index/user
|
||||||
self::$bind = ['type' => 'module', 'module' => $result];
|
self::$bind = ['type' => 'module', 'module' => $result];
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -773,7 +782,7 @@ class Route
|
|||||||
|
|
||||||
// 路由规则检测
|
// 路由规则检测
|
||||||
if (!empty($rules)) {
|
if (!empty($rules)) {
|
||||||
return self::checkRoute($request, $rules, $url);
|
return self::checkRoute($request, $rules, $url, $depr);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -784,10 +793,11 @@ class Route
|
|||||||
* @param Request $request
|
* @param Request $request
|
||||||
* @param array $rules 路由规则
|
* @param array $rules 路由规则
|
||||||
* @param string $url URL地址
|
* @param string $url URL地址
|
||||||
|
* @param string $depr URL分割符
|
||||||
* @param string $group 路由分组名
|
* @param string $group 路由分组名
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
private static function checkRoute($request, $rules, $url, $group = '')
|
private static function checkRoute($request, $rules, $url, $depr = '/', $group = '')
|
||||||
{
|
{
|
||||||
foreach ($rules as $key => $item) {
|
foreach ($rules as $key => $item) {
|
||||||
if (true === $item) {
|
if (true === $item) {
|
||||||
@@ -818,14 +828,15 @@ class Route
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = self::checkRoute($request, $rule, $url, $key);
|
$result = self::checkRoute($request, $rule, $url, $depr, $key);
|
||||||
if (false !== $result) {
|
if (false !== $result) {
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
} elseif ($route) {
|
} elseif ($route) {
|
||||||
if ('__miss__' == $rule) {
|
if ('__miss__' == $rule || '__auto__' == $rule) {
|
||||||
// 指定MISS路由
|
// 指定特殊路由
|
||||||
$miss = $item;
|
$var = trim($rule, '__');
|
||||||
|
${$var} = $item;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if ($group) {
|
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']);
|
return self::parseRule('', $miss['route'], $url, $miss['option']);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user