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) { // 后台应用专属异常处理 } }