必须同时启用多应用模式与插件扩展机制才能实现前台、后台、API三套业务逻辑彻底隔离;需安装think-multi-app扩展、清空app/controller、用php think build生成子应用、配置app_multi_module为true、显式导入子应用路由并启用APP_PLUGINS。

要在ThinkPHP 6.0中让前台、后台、API三套业务逻辑彻底隔离运行,避免路由冲突、命名空间错乱和配置互相覆盖,必须同时打通多应用模式与插件扩展机制——只开app_multi或只装扩展都不行,两者缺一不可。
安装并验证think-multi-app扩展
进入项目根目录,执行命令安装官方多应用支持扩展:
composer require topthink/think-multi-app
安装后立即验证是否生效:运行composer show topthink/think-multi-app,有版本输出即表示扩展已载入。若无输出,说明未在正确目录执行,或composer缓存异常,需清理后重试。
立即学习“PHP免费学习笔记(深入)”;
【必须确认框架为TP6.x】 运行composer show topthink/think,确保显示6.x版本(如6.3.5),若显示8.x或3.2.x,该配置将完全无效。
清理单应用残留结构
删除app/目录下原有的controller、model、view、common.php等顶层文件和文件夹——只要app/controller存在,框架就会强制降级为单应用模式,app_multi_module => true也形同虚设。
这一步操作起来很简单,直接把app/controller整个删掉就行。删完后app/目录应为空,或仅保留config/app.php等配置文件。
注意:不要手动新建admin/或index/子目录,后续统一用命令生成,避免权限或命名空间声明遗漏。
创建子应用并校验目录规范
使用框架内置命令生成标准子应用结构:
php think build index → php think build admin → php think build api
每个子应用名必须全部小写、不含短横线或下划线(admin✅,admin-v2❌,Admin❌)。build命令不会覆盖已有文件,但也不会自动补全子应用内缺失的config/app.php,需手动检查app/index/config/app.php是否存在。
生成后检查app/index/controller/Index.php的命名空间是否为namespace app\index\controller;——若仍为app\controller,说明build前未清空原始controller目录,需重新执行清理+build流程。
同步修改核心配置项
打开config/app.php,确认以下三项已设置:
'app_multi_module' => true,
'app_namespace' => 'app',
'default_app' => 'index',
ThinkPHP 6.0.0 是国产轻量级 PHP 框架的里程碑式版本,于 2019 年正式发布。该版本基于“精简核心”与“统一用法”原则,对底层架构进行了彻底重构。它强制要求 PHP 7.1+ 环境,全面启用强类型声明,深度支持 PSR 规范,并引入了独立的多应用模式、改进的中间件机制及全新的事件系统,标志着 ThinkPHP 正式迈入现代化、标准化与企业级开发的新阶段。
其中app_namespace必须设为'app'(不是'app\controller'),否则访问/admin/index/index时会报Class not found;default_app设为'index'后,不带应用前缀的URL(如/)将默认指向前台应用。
删除或注释掉config/app.php中所有app_multi_module的重复定义,避免配置冲突。
显式导入子应用路由
在route/route.php最末尾添加以下三行:
Route::import('index', 'index');
Route::import('admin', 'admin');
Route::import('api', 'api');
第二个参数必须与app/下的目录名完全一致(大小写敏感),第一个参数是路由分组标识,会影响URL前缀(如/admin/xxx由Route::import('admin', 'admin')启用)。
【不可省略】 若不写这三行,app/admin/route.php、app/api/route.php等文件将完全不被加载,控制器再全也进不去。
启用插件扩展机制
方法一:通过.env文件启用
将项目根目录下的.example.env重命名为.env,并在其中添加:
APP_PLUGINS=true
方法二:在public/index.php入口文件中定义常量
在require __DIR__ . '/../vendor/autoload.php';之前插入:
define('APP_PLUGINS', true);
两种方式任选其一即可,无需同时设置。插件目录默认为plugins/,需确保该目录存在且可写。
插件扩展机制与多应用模式共存时,插件中的服务提供者(ServiceProvider)会在所有应用启动时自动注册,无需为每个子应用单独配置。


















