ThinkPHP多应用模式下怎么创建新模块_多应用模块创建【教程】

1次阅读

thinkphp多应用模式下新模块需满足:app/下全小写目录(如admin)、含controller子目录、app_multi=true、app_express=false、模块名加入app_allow白名单,并清空runtime/app/缓存。

ThinkPHP多应用模式下怎么创建新模块_多应用模块创建【教程】

ThinkPHP 多应用模式下,新模块不是“创建”出来的,而是通过目录结构和配置自动识别的——漏掉 app.php 配置或命名不规范,模块就根本不会被加载。

模块目录必须放在 app/ 下且命名全小写

多应用模式下,每个模块对应 app/ 目录下的一个子目录,比如要加个后台管理模块,就得建 app/admin,不能叫 app/Adminapp/AdminModulewindows 下可能暂时不报错,但 linux 服务器会直接 404——因为 ThinkPHP 的应用解析器默认只认全小写字母 + 数字 + 下划线的目录名。

  • app/ 下新建目录必须全小写,如:adminapiinstall
  • 目录内至少包含一个 controller 子目录(哪怕为空)
  • 不要手动在 route/config/ 里提前“注册”模块,它靠自动扫描

app.php 里必须显式启用该模块

即使目录建对了,如果 config/app.phpapp_expressfalse(默认值),或者 app_multi 没设为 true,框架压根不会进入多应用识别流程。更关键的是:新模块名必须出现在 app_allow 白名单里,否则会被静默忽略。

  • 确认 app_multi => true
  • 确认 app_express => false(设为 true 会跳过模块检测)
  • 把模块名加入 app_allow 数组,例如:['home', 'admin', 'api']
  • 改完配置后清空 runtime/app/ 缓存,否则旧缓存可能卡住识别

访问路径格式固定,不能自定义路由前缀

模块名就是 URL 第一段,没有配置入口。比如 app/admin 对应访问 /admin/app/api 对应 /api/。想改成 /v1//backend/?不行——那是路由层的事,不是模块层。强行在 route/app.php 里绑定 adminv1,会导致控制器解析失败,报错 ClassNotFoundException

立即学习PHP免费学习笔记(深入)”;

  • URL 路径 = 模块目录名,大小写严格一致
  • 模块内控制器方法访问路径是 /模块名/控制器/操作,例如:/admin/index/index
  • 不要试图用 Route::domain()Route::group() 把模块“挂”到其他路径下,模块和路由是两套机制

最容易被忽略的是:模块目录建好、配置写对之后,没清缓存就反复刷新页面,结果一直提示“应用不存在”。其实框架早识别到了,只是 runtime 里缓存的 app list 还是旧的——删掉 runtime/app/ 整个目录比试来试去快得多。

text=ZqhQzanResources