ThinkPHP 多应用场景下默认应用 URL 生成优化

多应用模式下,生成 URL 会带上应用名称,包括我们设置的默认应用也会带上的。

1
2
3
4
5
public function index()
{
return (string) url('index/index/index');
// /index/index/index.html
}

上面的注释是返回的值,可以分析出 URL 是在 index 模块下 index 控制器的 index 方法,可能会觉得有点不美观,目前发现存在三种方案可以修改。

设置应用名称为空字符串

1
2
3
4
5
6
7
public function index()
{
$this->app->http->name('');
// app('http')->name('');
return (string) url('index/index/index');
// /index/index.html
}

配置文件设置应用映射

config\app.php

1
2
3
4
// 应用映射(自动多应用模式有效)
'app_map' => [
'/' => 'index',
],
1
2
3
4
5
public function index()
{
return (string) url('index/index/index');
// /index/index.html
}

字符串处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public function index()
{
// 获取生成的 URL
$url = (string) url('index/index/index');

// 获取默认应用名称
$default_app = config('app.default_app', 'index');

// 通过前缀判断是否为默认应用,是的话去除应用的路径
// 注意:和会前面两个起冲突,不能一起用
if(strpos($url, '/' . $default_app) === 0) {
$url = substr($url, strlen($default_app) + 1);
}

return $url;
// /index/index.html
}

评论