admin管理员组

文章数量:1633774

多应用模式版本路由,并且以子域名的方式绑定应用

当前版本为thinkphp6.0.3

开启多应用模式需要使用到一个拓展

composer require topthink/think-multi-app

Apache的配置文件需要配置,当前我用的phpstudy 2018,PHP7.1

在phpstudy的Apache下,需要修改项目根目录下的/public/.htaccess

具体配置如下

<IfModule mod_rewrite.c>
  Options +FollowSymlinks -Multiviews
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>

 

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

<?php
namespace app\mini\controller\v1;

use app\BaseController;

class Index extends BaseController
{
    public function name(){
        $name = "my name is zhangsan";
        return $name;
    }
}

要使用路由还需要经过一番配置

例如当前我的顶级域名是 a

那么我需要把mini.a绑定到mini应用上则需要进行域名绑定

首先在项目的config/app.php

改成如下配置

// 是否启用路由
    'with_route'       => true,

// 域名绑定(自动多应用模式有效)
    'domain_bind'      => [
        "mini" => "mini",
        "123"  => "admin"
    ],

这时候mini.a被绑定了mini应用

123.a被绑定到了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

代码如下

<?php
use think\facade\Route;

Route::get(":version.name",":version.Index/name");

到此,可以用postman或者浏览器访问一下。

如下图就成功的输出了控制器中的字符串

再新建一个v2文件夹 并且同样给一个Index控制器

控制器复制前面的,只是命名空间需要改成v2

<?php
namespace app\mini\controller\v2;

use app\BaseController;

class Index extends BaseController
{
    public function name(){
        $name = "my name is lisi";
        return $name;
    }
}

 

可以看到v2版本也能成功访问到了。

至此就可以使用子域名绑定应用+路由+版本号的方式开发了。

本文标签: 路由版本模式