优化链接生成函数,使其能够正常跨应用生成链接并且支持app_map的设置;

This commit is contained in:
2022-07-05 15:23:17 +08:00
parent 4b4f4b1ff1
commit e554b226b6
2 changed files with 40 additions and 6 deletions

View File

@@ -19,6 +19,13 @@ class Index extends AdminController
*/
public function index()
{
dump(__url('system.Admin/index'));
dump(__url('Ajax/Ajax/initAdmin'));
dump(__url('Ajax/initAdmin',[],false,true));
dump(__url('welcome'));
dump(__url('tools/timer.ClearLog/do'));
return $this->fetch('', [
'admin' => session('admin'),
]);
@@ -117,5 +124,4 @@ class Index extends AdminController
$this->assign('row', $row);
return $this->fetch();
}
}

View File

@@ -17,19 +17,29 @@ if (!function_exists('__url')) {
*/
function __url(string $url = '', array $vars = [], $suffix = true, $domain = false)
{
$url_arr = explode('/', $url);
$url = url($url, $vars, $suffix, $domain)->build();
$url_data = parse_url($url);
$url_path = $url_data['path'];
$url_arr = explode('/', $url_path);
$app_map = config('app.app_map');
$app_name = array_search($url_arr[0], $app_map);
$app_name = array_search($url_arr[1], $app_map);
if (!empty($app_name)) {
$url_arr[0] = $app_name;
$url_arr[1] = $app_name;
}
$url = implode('/', $url_arr);
$url_path = implode('/', $url_arr);
return url($url, $vars, $suffix, $domain)->build();
$url_data['path'] = $url_path;
$url = unparse_url($url_data);
return $url;
}
}
@@ -191,3 +201,21 @@ function json_message($data = [], $code = 0, $msg = '')
'data' => $data
]);
}
if (!function_exists('unparse_url')) {
function unparse_url($parsed_url)
{
$scheme = isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : '';
$host = isset($parsed_url['host']) ? $parsed_url['host'] : '';
$port = isset($parsed_url['port']) ? ':' . $parsed_url['port'] : '';
$user = isset($parsed_url['user']) ? $parsed_url['user'] : '';
$pass = isset($parsed_url['pass']) ? ':' . $parsed_url['pass'] : '';
$pass = ($user || $pass) ? "$pass@" : '';
$path = isset($parsed_url['path']) ? $parsed_url['path'] : '';
$query = isset($parsed_url['query']) ? '?' . $parsed_url['query'] : '';
$fragment = isset($parsed_url['fragment']) ? '#' . $parsed_url['fragment'] : '';
return "$scheme$user$pass$host$port$path$query$fragment";
}
}