ThinkPHP6多应用模式实战:从配置到权限管理的完整解决方案
一、多应用模式核心优势
ThinkPHP6的多应用模式相比传统单应用具有以下特点:
- 业务隔离:前后台、API等应用完全独立
- 配置独立:每个应用可自定义路由、中间件等
- 资源共享:公共模型、服务可跨应用复用
- 部署灵活:支持不同应用独立部署
二、多应用配置实战
1. 基础配置
// config/app.php
return [
'app_map' => [
'admin' => 'admin', // 域名admin.xxx.com对应admin应用
'*' => 'home' // 其他域名访问home应用
],
'domain_bind' => [
'api.xxx.com' => 'api' // 子域名绑定
]
];
2. 目录结构
wwwroot/ ├─app/ │ ├─admin/ # 后台应用 │ │ ├─controller/ │ │ ├─model/ │ ├─api/ # API接口应用 │ ├─home/ # 前台应用 │ ├─common/ # 公共目录 │ │ ├─model/ # 公共模型 │ │ ├─service/ # 公共服务
三、企业级权限系统案例
1. 数据库设计
# 管理员表 CREATE TABLE `admin` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(32) NOT NULL, `password` char(32) NOT NULL ); # 角色表 CREATE TABLE `role` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL ); # 权限节点表 CREATE TABLE `rule` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(50) NOT NULL, `url` varchar(100) NOT NULL );
2. 权限验证中间件
// app/admin/middleware/Auth.php
class Auth
{
public function handle($request, Closure $next)
{
$rule = $request->controller().'/'.$request->action();
if(!AuthService::check($rule)){
return redirect('/admin/login');
}
return $next($request);
}
}
3. 多应用路由配置
// route/admin.php
Route::group('admin', function(){
Route::rule('login', 'admin/auth/login');
Route::rule('logout', 'admin/auth/logout');
})->middleware(appadminmiddlewareAuth::class);
四、常见问题解决方案
问题1:跨应用调用服务
// 在api应用中调用admin服务
app('adminserviceUser')->getInfo($uid);
问题2:统一异常处理
// 每个应用创建自己的异常处理
// app/admin/exception/Handle.php
class Handle extends thinkexceptionHandle
{
public function render($request, Throwable $e)
{
// 后台应用专属异常处理
}
}

