diff --git a/library/think/route.php b/library/think/route.php index ec586cf0..22359b7e 100644 --- a/library/think/route.php +++ b/library/think/route.php @@ -186,11 +186,12 @@ class Route } if (!empty($rule)) { // 子域名部署规则 - // '子域名'=>'模块[/控制器]' - // '子域名'=>['模块[/控制器]','var1=a&var2=b&var3=*']; + // '子域名'=>'模块[/控制器/操作]' + // '子域名'=>['模块[/控制器/操作]','var1=a&var2=b&var3=*']; if ($rule instanceof \Closure) { // 执行闭包并中止 $result = self::invokeRule($route); + // 返回 [模块,控制器,操作] return is_array($result) ? $result : exit($result); } if (is_array($rule)) { @@ -216,7 +217,7 @@ class Route } // 检测URL路由 - public static function check($url, $depr = '/') + public static function check($url, $depr = '/', &$result = []) { // 优先检测是否存在PATH_INFO if (empty($url)) { @@ -417,7 +418,7 @@ class Route return $reflect->invokeArgs($args); } - // 解析模块的URL地址 [控制器/操作?]参数1=值1&参数2=值2... + // 解析模块的URL地址 [模块/控制器/操作?]参数1=值1&参数2=值2... public static function parseUrl($url) { $result = self::parseRoute($url); @@ -428,32 +429,34 @@ class Route } // 解析规范的路由地址 - // 地址格式 [控制器/操作?]参数1=值1&参数2=值2... + // 地址格式 [模块/控制器/操作?]参数1=值1&参数2=值2... private static function parseRoute($url) { $var = []; if (false !== strpos($url, '?')) { - // [控制器/操作?]参数1=值1&参数2=值2... + // [模块/控制器/操作?]参数1=值1&参数2=值2... $info = parse_url($url); $path = explode('/', $info['path'], 4); parse_str($info['query'], $var); } elseif (strpos($url, '/')) { - // [控制器/操作] + // [模块/控制器/操作] $path = explode('/', $url, 4); } else { // 参数1=值1&参数2=值2... parse_str($url, $var); } if (isset($path)) { - $param = []; - if(!empty($path[3])) $param = explode('/', array_pop($path)); // 解析[模块/控制器/操作] $action = array_pop($path); $action = '[rest]' == $action ? REQUEST_METHOD : $action; $controller = !empty($path) ? array_pop($path) : null; $module = !empty($path) ? array_pop($path) : null; // 解析path额外的参数 - for ($i=0; $i