mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-06 15:02:47 +08:00
IS_API 下面不通过路由解析 直接解析到API类所在的命名空间 Route类改进
This commit is contained in:
@@ -93,6 +93,8 @@ return [
|
|||||||
'url_controller_layer' => 'controller',
|
'url_controller_layer' => 'controller',
|
||||||
// 表单请求类型伪装变量
|
// 表单请求类型伪装变量
|
||||||
'var_method' => '_method',
|
'var_method' => '_method',
|
||||||
|
// URL解析方式 module controller class namespace
|
||||||
|
'url_parse_type' => 'module',
|
||||||
|
|
||||||
// +----------------------------------------------------------------------
|
// +----------------------------------------------------------------------
|
||||||
// | 模板引擎设置
|
// | 模板引擎设置
|
||||||
|
|||||||
@@ -95,8 +95,13 @@ class App
|
|||||||
// 获取应用调度信息
|
// 获取应用调度信息
|
||||||
$dispatch = self::$dispatch;
|
$dispatch = self::$dispatch;
|
||||||
if (empty($dispatch)) {
|
if (empty($dispatch)) {
|
||||||
// 未指定调度类型 则进行URL路由检测
|
if (IS_API) {
|
||||||
$dispatch = self::routeCheck($request, $config);
|
// 直接绑定到控制器类命名空间 URL区分大小写 v1/User/getInfo
|
||||||
|
$dispatch = Route::bindToApi($request->path(), self::$namespace, $config['pathinfo_depr']);
|
||||||
|
} else {
|
||||||
|
// 进行URL路由检测
|
||||||
|
$dispatch = self::routeCheck($request, $config);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// 记录当前调度信息
|
// 记录当前调度信息
|
||||||
$request->dispatch($dispatch);
|
$request->dispatch($dispatch);
|
||||||
@@ -468,7 +473,7 @@ class App
|
|||||||
}
|
}
|
||||||
if (false === $result) {
|
if (false === $result) {
|
||||||
// 路由无效 解析模块/控制器/操作/参数... 支持控制器自动搜索
|
// 路由无效 解析模块/控制器/操作/参数... 支持控制器自动搜索
|
||||||
$result = Route::parseUrl($path, $depr, $config['controller_auto_search'], $config['url_param_type']);
|
$result = Route::parseUrl($path, $depr, $config['controller_auto_search'], $config['url_param_type'], $config['url_parse_type']);
|
||||||
}
|
}
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -656,13 +656,13 @@ class Route
|
|||||||
// 路由不匹配
|
// 路由不匹配
|
||||||
} elseif (0 === strpos($rule, '\\')) {
|
} elseif (0 === strpos($rule, '\\')) {
|
||||||
// 路由到类
|
// 路由到类
|
||||||
return self::bindToClass($array[1], substr($rule, 1));
|
return self::bindToClass($array[1], substr($rule, 1), $depr);
|
||||||
} elseif (0 === strpos($url, '@')) {
|
} elseif (0 === strpos($url, '@')) {
|
||||||
// 路由到控制器类
|
// 路由到控制器类
|
||||||
return self::bindToController($array[1], substr($rule, 1));
|
return self::bindToController($array[1], substr($rule, 1), $depr);
|
||||||
} else {
|
} else {
|
||||||
// 路由到模块/控制器
|
// 路由到模块/控制器
|
||||||
return self::bindToModule($array[1], $rule);
|
return self::bindToModule($array[1], $rule, $depr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -679,7 +679,7 @@ class Route
|
|||||||
self::checkDomain($request);
|
self::checkDomain($request);
|
||||||
}
|
}
|
||||||
// 检测URL绑定
|
// 检测URL绑定
|
||||||
$return = self::checkUrlBind($url, $rules);
|
$return = self::checkUrlBind($url, $rules, $depr);
|
||||||
if ($return) {
|
if ($return) {
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -779,9 +779,10 @@ class Route
|
|||||||
* @access private
|
* @access private
|
||||||
* @param string $url URL地址
|
* @param string $url URL地址
|
||||||
* @param array $rules 路由规则
|
* @param array $rules 路由规则
|
||||||
|
* @param string $depr URL分隔符
|
||||||
* @return false
|
* @return false
|
||||||
*/
|
*/
|
||||||
private static function checkUrlBind(&$url, &$rules)
|
private static function checkUrlBind(&$url, &$rules, $depr = '/')
|
||||||
{
|
{
|
||||||
if (!empty(self::$bind['type'])) {
|
if (!empty(self::$bind['type'])) {
|
||||||
// 记录绑定信息
|
// 记录绑定信息
|
||||||
@@ -790,10 +791,10 @@ class Route
|
|||||||
switch (self::$bind['type']) {
|
switch (self::$bind['type']) {
|
||||||
case 'class':
|
case 'class':
|
||||||
// 绑定到类
|
// 绑定到类
|
||||||
return self::bindToClass($url, self::$bind['class']);
|
return self::bindToClass($url, self::$bind['class'], $depr);
|
||||||
case 'namespace':
|
case 'namespace':
|
||||||
// 绑定到命名空间
|
// 绑定到命名空间
|
||||||
return self::bindToNamespace($url, self::$bind['namespace']);
|
return self::bindToNamespace($url, self::$bind['namespace'], $depr);
|
||||||
case 'module':
|
case 'module':
|
||||||
// 如果有模块/控制器绑定 针对路由到 模块/控制器 有效
|
// 如果有模块/控制器绑定 针对路由到 模块/控制器 有效
|
||||||
$url = self::$bind['module'] . '/' . $url;
|
$url = self::$bind['module'] . '/' . $url;
|
||||||
@@ -814,11 +815,12 @@ class Route
|
|||||||
* @access public
|
* @access public
|
||||||
* @param string $url URL地址
|
* @param string $url URL地址
|
||||||
* @param string $class 类名(带命名空间)
|
* @param string $class 类名(带命名空间)
|
||||||
|
* @param string $depr URL分隔符
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function bindToClass($url, $class)
|
public static function bindToClass($url, $class, $depr = '/')
|
||||||
{
|
{
|
||||||
$array = explode('/', $url, 2);
|
$array = explode($depr, $url, 2);
|
||||||
if (!empty($array[1])) {
|
if (!empty($array[1])) {
|
||||||
self::parseUrlParams($array[1]);
|
self::parseUrlParams($array[1]);
|
||||||
}
|
}
|
||||||
@@ -830,11 +832,12 @@ class Route
|
|||||||
* @access public
|
* @access public
|
||||||
* @param string $url URL地址
|
* @param string $url URL地址
|
||||||
* @param string $namespace 命名空间
|
* @param string $namespace 命名空间
|
||||||
|
* @param string $depr URL分隔符
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function bindToNamespace($url, $namespace)
|
public static function bindToNamespace($url, $namespace, $depr = '/')
|
||||||
{
|
{
|
||||||
$array = explode('/', $url, 3);
|
$array = explode($depr, $url, 3);
|
||||||
$class = !empty($array[0]) ? $array[0] : Config::get('default_controller');
|
$class = !empty($array[0]) ? $array[0] : Config::get('default_controller');
|
||||||
$method = !empty($array[1]) ? $array[1] : Config::get('default_action');
|
$method = !empty($array[1]) ? $array[1] : Config::get('default_action');
|
||||||
if (!empty($array[2])) {
|
if (!empty($array[2])) {
|
||||||
@@ -848,11 +851,12 @@ class Route
|
|||||||
* @access public
|
* @access public
|
||||||
* @param string $url URL地址
|
* @param string $url URL地址
|
||||||
* @param string $module 模块名
|
* @param string $module 模块名
|
||||||
|
* @param string $depr URL分隔符
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function bindToController($url, $controller)
|
public static function bindToController($url, $controller, $depr = '/')
|
||||||
{
|
{
|
||||||
$array = explode('/', $url, 2);
|
$array = explode($depr, $url, 2);
|
||||||
$action = !empty($array[0]) ? $array[0] : Config::get('default_action');
|
$action = !empty($array[0]) ? $array[0] : Config::get('default_action');
|
||||||
if (!empty($array[1])) {
|
if (!empty($array[1])) {
|
||||||
self::parseUrlParams($array[1]);
|
self::parseUrlParams($array[1]);
|
||||||
@@ -865,11 +869,12 @@ class Route
|
|||||||
* @access public
|
* @access public
|
||||||
* @param string $url URL地址
|
* @param string $url URL地址
|
||||||
* @param string $class 控制器类名(带命名空间)
|
* @param string $class 控制器类名(带命名空间)
|
||||||
|
* @param string $depr URL分隔符
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function bindToModule($url, $controller)
|
public static function bindToModule($url, $controller, $depr = '/')
|
||||||
{
|
{
|
||||||
$array = explode('/', $url, 2);
|
$array = explode($depr, $url, 2);
|
||||||
$action = !empty($array[0]) ? $array[0] : Config::get('default_action');
|
$action = !empty($array[0]) ? $array[0] : Config::get('default_action');
|
||||||
if (!empty($array[1])) {
|
if (!empty($array[1])) {
|
||||||
self::parseUrlParams($array[1]);
|
self::parseUrlParams($array[1]);
|
||||||
@@ -877,6 +882,27 @@ class Route
|
|||||||
return ['type' => 'module', 'module' => $controller . '/' . $action];
|
return ['type' => 'module', 'module' => $controller . '/' . $action];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 绑定到API
|
||||||
|
* @access public
|
||||||
|
* @param string $url URL地址
|
||||||
|
* @param string $namespace 命名空间
|
||||||
|
* @param string $depr URL分隔符
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function bindToApi($url, $namespace, $depr = '/')
|
||||||
|
{
|
||||||
|
$array = explode($depr, $url, 4);
|
||||||
|
$module = !empty($array[0]) ? $array[0] : Config::get('default_module');
|
||||||
|
$class = !empty($array[1]) ? $array[1] : Config::get('default_controller');
|
||||||
|
$method = !empty($array[2]) ? $array[2] : Config::get('default_action');
|
||||||
|
$layer = Config::get('url_controller_layer');
|
||||||
|
if (!empty($array[3])) {
|
||||||
|
self::parseUrlParams($array[3]);
|
||||||
|
}
|
||||||
|
return ['type' => 'method', 'method' => [$namespace . '\\' . $module . '\\' . $layer . '\\' . $class, $method], 'params' => []];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 路由参数有效性检查
|
* 路由参数有效性检查
|
||||||
* @access private
|
* @access private
|
||||||
@@ -976,9 +1002,10 @@ class Route
|
|||||||
* @param string $depr URL分隔符
|
* @param string $depr URL分隔符
|
||||||
* @param bool $autoSearch 是否自动深度搜索控制器
|
* @param bool $autoSearch 是否自动深度搜索控制器
|
||||||
* @param integer $paramType URL参数解析方式 0 名称解析 1 顺序解析
|
* @param integer $paramType URL参数解析方式 0 名称解析 1 顺序解析
|
||||||
|
* @param string $type 路由类型
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function parseUrl($url, $depr = '/', $autoSearch = false, $paramType = 0)
|
public static function parseUrl($url, $depr = '/', $autoSearch = false, $paramType = 0, $type = 'module')
|
||||||
{
|
{
|
||||||
if (isset(self::$bind['module'])) {
|
if (isset(self::$bind['module'])) {
|
||||||
// 如果有模块/控制器绑定
|
// 如果有模块/控制器绑定
|
||||||
@@ -994,7 +1021,7 @@ class Route
|
|||||||
if (!empty($result['var'])) {
|
if (!empty($result['var'])) {
|
||||||
$_GET = array_merge($result['var'], $_GET);
|
$_GET = array_merge($result['var'], $_GET);
|
||||||
}
|
}
|
||||||
return ['type' => 'module', 'module' => $result['route']];
|
return ['type' => $type, $type => $result['route']];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user