多应用模式版本路由,并且以子域名的方式绑定应用
当前版本为thinkphp6.0.3
开启多应用模式需要使用到一个拓展
composer require topthink/think-multi-app
Apache的配置文件需要配置,当前我用的phpstudy 2018,PHP7.1
在phpstudy的Apache下,需要修改项目根目录下的/public/.htaccess
具体配置如下
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
NGINX的配置(只测试过1.14以上的版本。其他版本自行测试)
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=$1 last; break;
}
}
这时候用普通访问模式,就可以正常访问到控制器的方法了。但是在路由模式下还是不能访问到。
在ThinkPHP5.1的时候,版本写到路由里还能直接写成如下格式
Route::get('api/:version/home','api/:version.Index/home');
而在ThinkPHP6.0却有一些改变
现在新建目录,结构类似下图
在app下新建了mini、admin两个应用(他俩是同级目录)
其中mini目录下有controller、model、service、route目录(admin也同样需要一样的子目录)
controller下还有一个v1的版本文件夹、v1下面有一个名为Index的控制器
Index控制器里的代码如下,一定要注意命名空间后面有一个v1
要使用路由还需要经过一番配置
例如当前我的顶级域名是 a.com
那么我需要把mini.a.com绑定到mini应用上则需要进行域名绑定
首先在项目的config/app.php
改成如下配置
// 是否启用路由
'with_route' => true,
// 域名绑定(自动多应用模式有效)
'domain_bind' => [
"mini" => "mini",
"123" => "admin"
],
这时候mini.a.com被绑定了mini应用
123.a.com被绑定到了admin应用
接着是路由的配置
在config/route.php里
根据需要修改
// URL伪静态后缀
'url_html_suffix' => '',
// URL普通方式参数 用于自动生成
'url_common_param' => true,
// 是否开启路由延迟解析
'url_lazy_route' => false,
// 是否强制使用路由
'url_route_must' => true,
// 合并路由规则
'route_rule_merge' => false,
// 路由是否完全匹配
'route_complete_match' => true,
紧接着在app\mini\route下新建一个route.php
代码如下
到此,可以用postman或者浏览器访问一下。
如下图就成功的输出了控制器中的字符串
再新建一个v2文件夹 并且同样给一个Index控制器
控制器复制前面的,只是命名空间需要改成v2
可以看到v2版本也能成功访问到了。
至此就可以使用子域名绑定应用+路由+版本号的方式开发了。