ThinkPHP6多应用模块开发实战:企业级项目架构指南
一、多应用模式的优势与场景
ThinkPHP6的多应用模式特别适合以下场景:
- 前后端分离项目(API+Admin)
- 多平台项目(PC+H5+小程序)
- SaaS系统(多租户隔离)
- 微服务架构(网关+服务模块)
二、多应用环境配置
1. 安装多应用扩展
composer require topthink/think-multi-app
2. 目录结构调整
www/
├── app/
│ ├── admin/ # 后台应用
│ │ ├── controller/
│ │ ├── model/
│ │ └── view/
│ ├── api/ # 接口应用
│ │ ├── controller/
│ │ └── middleware/
│ └── common/ # 公共模块
│ ├── service/
│ └── trait/
├── config/
├── route/
│ ├── admin.php
│ └── api.php
└── public/
三、核心功能实现
1. 跨应用路由配置
route/admin.php 后台路由:
<?php
use thinkfacadeRoute;
Route::group('admin', function() {
// 登录路由
Route::post('login', 'admin.Auth/login');
// 需要权限的路由
Route::group(function() {
Route::resource('user', 'admin.User');
Route::resource('menu', 'admin.Menu');
})->middleware(appadminmiddlewareAuth::class);
});
2. 公共Service层实现
app/common/service/JwtService.php:
<?php
namespace appcommonservice;
use FirebaseJWTJWT;
class JwtService
{
private static $key = 'your-secret-key';
public static function createToken($uid)
{
$payload = [
'iss' => 'your-domain',
'iat' => time(),
'exp' => time() + 7200,
'uid' => $uid
];
return JWT::encode($payload, self::$key);
}
public static function verifyToken($token)
{
try {
return JWT::decode($token, self::$key, ['HS256']);
} catch (Exception $e) {
return false;
}
}
}
四、高级功能实现
1. 多应用中间件配置
app/admin/middleware/Auth.php:
<?php
namespace appadminmiddleware;
use appcommonserviceJwtService;
class Auth
{
public function handle($request, Closure $next)
{
$token = $request->header('Authorization');
if (!$token) {
return json(['code' => 401, 'msg' => 'Token缺失']);
}
$payload = JwtService::verifyToken($token);
if (!$payload) {
return json(['code' => 403, 'msg' => 'Token无效']);
}
$request->uid = $payload->uid;
return $next($request);
}
}
2. 多数据库连接配置
config/database.php:
'connections' => [
// 主库(写操作)
'master' => [
'type' => 'mysql',
'hostname' => '127.0.0.1',
'database' => 'db_master',
'username' => 'root',
'password' => '',
'charset' => 'utf8mb4',
],
// 从库(读操作)
'slave' => [
'type' => 'mysql',
'hostname' => '127.0.0.1',
'database' => 'db_slave',
'username' => 'root',
'password' => '',
'charset' => 'utf8mb4',
],
],
五、性能优化方案
1. 路由缓存
// 生成路由缓存
php think optimize:route
// 清除路由缓存
php think clear:route
2. 配置缓存
// 生成配置缓存
php think optimize:config
// 生产环境建议在composer.json中添加
"scripts": {
"post-autoload-dump": [
"@php think optimize:config",
"@php think optimize:route"
]
}
3. 自动加载优化
composer dump-autoload --optimize
六、项目部署方案
- 使用Nginx进行负载均衡
- 配置Supervisor守护进程
- 使用Redis作为Session和缓存驱动
- 实现自动化部署脚本
- 配置日志切割(logrotate)