tp8升级后子应用需显式启用:必须设置'app_multi'=>true、创建route/admin.php路由文件、目录与命名空间严格小写对应、模板路径手动隔离,缺一不可。

TP6 升级到 TP8 后,子应用(多应用模式)不会自动启用,目录结构必须配合配置显式开启,否则 app/admin/ 这类目录形同虚设。
子应用目录必须放在 app/ 下,且命名空间要与路径严格对应
TP8 不再识别 application/ 目录,所有应用级代码统一放 app/ 下。子应用如 admin 应为 app/admin/,内部结构需包含 controller/、model/ 等标准子目录;app/admin/controller/Index.php 必须声明 namespace app\admin\controller;,类名必须是 Index(非 IndexController),否则 PSR-4 自动加载失败,报 Class not found。
Linux 服务器上大小写敏感:app/Admin/ ≠ app/admin/,路径和命名空间都必须小写。
config/app.php 中必须显式开启多应用模式
TP8 默认是单应用模式,即使你建了 app/admin/,不配置就完全不可用。必须在 config/app.php 中设置:
'app_multi' => true,
这个配置项不存在或值为 false / null,框架启动时直接跳过子应用扫描逻辑。
常见错误现象:访问 /admin/index/index 返回 404 或空白页,但 app/index/ 正常——大概率就是漏了这行配置。
路由入口文件必须按子应用组织
TP8 的路由不再集中写在 route/app.php,而是每个子应用需有独立路由文件:route/admin.php 对应 app/admin/,内容需以 Route::domain() 或 Route::group() 显式绑定前缀或域名。
若仍沿用 TP6 的单文件写法,app/admin/ 的路由根本不会被加载。
注意:route/admin.php 是纯 PHP 文件,返回数组或直接调用 Route:: 静态方法,不能含输出、echo 或执行逻辑,否则启动失败。
view_path 配置不继承子应用,模板路径需手动隔离
TP8 没有“子应用自动切 view 目录”机制。默认 config/view.php 中的 view_path 是全局的,指向 app/view/;app/admin/ 的模板仍会去这里找,除非你主动干预。
两种可行方式:
- 控制器中传参覆盖:
return view('index', [], ['view_path' => app_path('view/admin/')]); - 在
app/admin/controller/Base.php基类里统一设置$this->view->config('view_path', app_path('view/admin/'));
别在 config/view.php 里写条件判断,比如 if (request()->app() === 'admin')——配置文件加载早于请求上下文,request() 还未初始化,直接报错。
最易被忽略的是:app_multi => true 和 route/admin.php 必须同时存在,缺一不可;只建目录、只改命名空间、只配路由文件,任意一环断掉,子应用就等于没生效。











