// +---------------------------------------------------------------------- declare (strict_types=1); /** * docs 插件全局助手函数(被前后台共用) * * docs_base_url():当前请求对应的前台路由前缀。 * - 独立入口 public/docs.php → '' * - 域名绑定命中 docs(config/app.php:16 domain_bind 的 docs / addon:docs / *)→ '' * - 普通路径模式 → '/docs' * * DocsFrontend 控制器 trait 与后台模板都通过本函数获取前缀, * 避免在多个类里重复 host/subDomain/domain_bind 判断逻辑。 */ if (!function_exists('docs_base_url')) { function docs_base_url(): string { // 1) 独立入口 $script = pathinfo((string) ($_SERVER['SCRIPT_FILENAME'] ?? ''), PATHINFO_FILENAME); if ($script === 'docs') { return ''; } // 2) 域名绑定 $bind = app()->config->get('app.domain_bind', []); if (!empty($bind) && is_array($bind)) { $host = request()->host(true); $sub = request()->subDomain(); foreach ([$host, $sub, '*'] as $key) { if (!isset($bind[$key]) || !is_string($bind[$key]) || $bind[$key] === '') { continue; } $target = str_contains($bind[$key], ':') ? substr($bind[$key], strpos($bind[$key], ':') + 1) : $bind[$key]; if ($target === 'docs') { return ''; } } } return '/docs'; } }