🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#### Url ~~~ /** * URL生成 支持路由反射 * @param string $url 路由地址 * @param string|array $vars 参数(支持数组和字符串)a=val&b=val2... ['a'=>'val1', 'b'=>'val2'] * @param string|bool $suffix 伪静态后缀,默认为true表示获取配置值 * @param boolean|string $domain 是否显示域名 或者直接传入域名 * @return string */ Url::build($url = '', $vars = '', $suffix = true, $domain = false); // 直接解析URL地址 self::parseUrl($url, &$domain); { $request = Request::instance(); if (0 === strpos($url, '/')) { // 直接作为路由地址解析 $url = substr($url, 1); } elseif (false !== strpos($url, '\\')) { // 解析到类 $url = ltrim(str_replace('\\', '/', $url), '/'); } elseif (0 === strpos($url, '@')) { // 解析到控制器 $url = substr($url, 1); } else { // 解析到 模块/控制器/操作 $module = $request->module(); $domains = Route::rules('domain'); if (true === $domain && 2 == substr_count($url, '/')) { $current = $request->host(); $match = []; $pos = []; foreach ($domains as $key => $item) { if (isset($item['[bind]']) && 0 === strpos($url, $item['[bind]'][0])) { $pos[$key] = strlen($item['[bind]'][0]) + 1; $match[] = $key; $module = ''; } } if ($match) { $domain = current($match); foreach ($match as $item) { if (0 === strpos($current, $item)) { $domain = $item; } } self::$bindCheck = true; $url = substr($url, $pos[$domain]); } } elseif ($domain) { if (isset($domains[$domain]['[bind]'][0])) { $bindModule = $domains[$domain]['[bind]'][0]; if ($bindModule && !in_array($bindModule[0], ['\\', '@'])) { $module = ''; } } } $module = $module ? $module . '/' : ''; $controller = Loader::parseName($request->controller()); if ('' == $url) { // 空字符串输出当前的 模块/控制器/操作 $url = $module . $controller . '/' . $request->action(); } else { $path = explode('/', $url); $action = Config::get('url_convert') ? strtolower(array_pop($path)) : array_pop($path); $controller = empty($path) ? $controller : (Config::get('url_convert') ? Loader::parseName(array_pop($path)) : array_pop($path)); $module = empty($path) ? $module : array_pop($path) . '/'; $url = $module . $controller . '/' . $action; } } return $url; } // 检测域名 self::parseDomain(&$url, $domain); // 解析URL后缀 self::parseSuffix($suffix); // 匹配路由地址 Url::function getRuleUrl($rule, &$vars = []); // 指定当前生成URL地址的root Url::function root($root); ~~~