From 6cb6cc5ad0ce499f2ddca17451aa0dc6c7da92a7 Mon Sep 17 00:00:00 2001 From: augushong Date: Sun, 18 Oct 2020 12:25:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=A4=9A=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E9=93=BE=E6=8E=A5=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/common.php | 33 +++++++++++++++++++++++++++++++++ config/app.php | 2 ++ 2 files changed, 35 insertions(+) diff --git a/app/common.php b/app/common.php index 192b377..6da4750 100644 --- a/app/common.php +++ b/app/common.php @@ -263,3 +263,36 @@ function get_order_sn($start = '', $end = '') { return $start . date('YmdHis') . mt_rand(1000, 9999) . $end; } + +/** + * 多应用下的url生成器 + * 在这里的@后面跟随的首先被认为成应用名而不是源文档的域名(或子域名) + * 程序会尝试找到应用对应的域名来生成地址,如果没找到,则按照源文档的逻辑执行 + * @param string $url + * @param array $vars + * @param boolean $suffix + * @param boolean $domain + * @return void + */ +function app_url(string $url = '', array $vars = [], $suffix = true, $domain = false) +{ + + $url_result = explode('@', $url); + // 在这里,@首先认为是应用名,而不是域名(或子域名) + if (isset($url_result[1])) { + $app_default_doamin = config('app.app_default_doamin'); + if (empty($app_default_doamin)) { + $app_domain_bind = config('app.domain_bind'); + + if (!empty($app_domain_bind)) { + $app_default_doamin = array_flip($app_domain_bind); + } + } + + if (isset($app_default_doamin[$url_result[1]])) { + $url = $url_result[0] . "@" . $app_default_doamin[$url_result[1]]; + } + } + + return url($url, $vars, $suffix, $domain); +} diff --git a/config/app.php b/config/app.php index 3bba167..523c59c 100644 --- a/config/app.php +++ b/config/app.php @@ -23,6 +23,8 @@ return [ 'app_map' => [], // 域名绑定(自动多应用模式有效) 'domain_bind' => [], + // 应用默认域名(自动多应用模式有效,为空时采用domain_bind的设置键值对换,适合跨应用生成url) + 'app_default_doamin' => [], // 禁止URL访问的应用列表(自动多应用模式有效) 'deny_app_list' => [],