增加控制器路由分组@group注解
This commit is contained in:
parent
e505c13843
commit
a53419328f
|
@ -141,33 +141,13 @@ class Router
|
||||||
*/
|
*/
|
||||||
private function findRule($rules, $uri)
|
private function findRule($rules, $uri)
|
||||||
{
|
{
|
||||||
$result = [];
|
$matchUri = ($uri == '/') ? '/' : '/' . trim($uri, '/');
|
||||||
if ($uri == '/' && isset($rules['/'])) {
|
if (isset($rules[$matchUri])) {
|
||||||
$result[] = '/';
|
$this->loadRuleParameters = $rules[$matchUri];
|
||||||
} else {
|
return [
|
||||||
// 如果不是首页则unset掉首页的规则,避免参与计算导致出错
|
'rule' => $matchUri,
|
||||||
unset($rules['/']);
|
'parameters' => $this->loadRuleParameters,
|
||||||
$keys = array_keys($rules);
|
];
|
||||||
foreach ($keys as $key) {
|
|
||||||
$pos = strpos($uri, $key);
|
|
||||||
if ($pos !== false) {
|
|
||||||
$endPos = $pos + strlen($key);
|
|
||||||
$result[$endPos] = $key;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!empty($result)) {
|
|
||||||
$max = max(array_keys($result));
|
|
||||||
$rest = str_replace($result[$max], '', $uri);
|
|
||||||
if (($result[$max] == '/' && $uri != '/') || ($rest != '' && substr($rest, 0, 1) != '/')) {
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
$this->loadRuleParameters = $rules[$result[$max]];
|
|
||||||
return [
|
|
||||||
'rule' => $result[$max],
|
|
||||||
'parameters' => $this->loadRuleParameters,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -311,14 +291,16 @@ class Router
|
||||||
|
|
||||||
// 配置中不执行的中间件
|
// 配置中不执行的中间件
|
||||||
$exceptMiddlewareArray = [];
|
$exceptMiddlewareArray = [];
|
||||||
if (isset($this->loadRuleParameters['except_middleware'])
|
if (
|
||||||
|
isset($this->loadRuleParameters['except_middleware'])
|
||||||
&& $this->loadRuleParameters['except_middleware'] != ''
|
&& $this->loadRuleParameters['except_middleware'] != ''
|
||||||
) {
|
) {
|
||||||
$exceptMiddlewareArray = $this->loadRuleParameters['except_middleware'];
|
$exceptMiddlewareArray = $this->loadRuleParameters['except_middleware'];
|
||||||
}
|
}
|
||||||
|
|
||||||
// 配置中新增的中间件
|
// 配置中新增的中间件
|
||||||
if (isset($this->loadRuleParameters['accept_middleware'])
|
if (
|
||||||
|
isset($this->loadRuleParameters['accept_middleware'])
|
||||||
&& $this->loadRuleParameters['accept_middleware'] != ''
|
&& $this->loadRuleParameters['accept_middleware'] != ''
|
||||||
) {
|
) {
|
||||||
$acceptMiddlewareArray = $this->loadRuleParameters['accept_middleware'];
|
$acceptMiddlewareArray = $this->loadRuleParameters['accept_middleware'];
|
||||||
|
@ -328,7 +310,7 @@ class Router
|
||||||
} else continue;
|
} else continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 应用打包在在洋葱圈最里层
|
// 应用打包在在洋葱圈最里层
|
||||||
$next = $application;
|
$next = $application;
|
||||||
foreach ($middleware as $value) {
|
foreach ($middleware as $value) {
|
||||||
|
@ -361,7 +343,8 @@ class Router
|
||||||
$defaultMethod = config('default_method');
|
$defaultMethod = config('default_method');
|
||||||
$requestMethod = strtolower($this->request->requestMethod());
|
$requestMethod = strtolower($this->request->requestMethod());
|
||||||
// 第一次用原始uri去做匹配,第二次带上默认方法去做匹配
|
// 第一次用原始uri去做匹配,第二次带上默认方法去做匹配
|
||||||
if (false === ($rule = $this->parseRouteRule($requestMethod, $uri))
|
if (
|
||||||
|
false === ($rule = $this->parseRouteRule($requestMethod, $uri))
|
||||||
&& false === ($rule = $this->parseRouteRule($requestMethod, $uri . '/' . $defaultMethod))
|
&& false === ($rule = $this->parseRouteRule($requestMethod, $uri . '/' . $defaultMethod))
|
||||||
) {
|
) {
|
||||||
// 如果开启强制路由,则抛异常
|
// 如果开启强制路由,则抛异常
|
||||||
|
@ -404,16 +387,22 @@ class Router
|
||||||
$files = scandir($controllerPath);
|
$files = scandir($controllerPath);
|
||||||
for ($i = 2; $i < count($files); $i++) {
|
for ($i = 2; $i < count($files); $i++) {
|
||||||
$className = $namespace . '\\' . pathinfo($files[$i])['filename'];
|
$className = $namespace . '\\' . pathinfo($files[$i])['filename'];
|
||||||
|
// 获取组名
|
||||||
|
$groupName = '';
|
||||||
|
$clsasAnnotation = Annotation::getClassAnnotation($className);
|
||||||
|
if (isset($clsasAnnotation['group']) && ($group = trim($clsasAnnotation['group'])) != '') {
|
||||||
|
$groupName = '/' . trim($group, '/');
|
||||||
|
}
|
||||||
$reflectionClass = Application::getReflectionClass($className);
|
$reflectionClass = Application::getReflectionClass($className);
|
||||||
foreach ($reflectionClass->getMethods() as $method) {
|
foreach ($reflectionClass->getMethods() as $method) {
|
||||||
if ($method->class == $className && substr($method->name, 0, 1) != '_') {
|
if ($method->class == $className && substr($method->name, 0, 1) != '_') {
|
||||||
$annotation = Annotation::getMethodAnnotation($className, $method->name);
|
$annotation = Annotation::getMethodAnnotation($className, $method->name);
|
||||||
$requestMethod = (isset($annotation['requestMethod'])) ? $annotation['requestMethod'] : 'any';
|
$requestMethod = (isset($annotation['requestMethod'])) ? $annotation['requestMethod'] : 'any';
|
||||||
if (isset($annotation['route'])) {
|
if (isset($annotation['route']) && ($uri = trim($annotation['route'])) != '') {
|
||||||
$requestUri = $annotation['route'];
|
$requestUri = '/' . trim($uri, '/');
|
||||||
} else continue;
|
} else continue;
|
||||||
$requestMethod = strtolower($requestMethod);
|
$requestMethod = strtolower($requestMethod);
|
||||||
$rule = ($requestUri == '/') ? $requestUri : trim($requestUri, '/');
|
$rule = $groupName . (($groupName != '' && $requestUri == '/') ? '' : $requestUri);
|
||||||
$result[$requestMethod][$rule] = [
|
$result[$requestMethod][$rule] = [
|
||||||
'class' => $className,
|
'class' => $className,
|
||||||
'method' => $method->name,
|
'method' => $method->name,
|
||||||
|
@ -463,5 +452,4 @@ class Router
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue