thinkphp模块化需目录、命名、路由、缓存四者严格对齐。必须手动创建规范目录结构(如app/admin/controller/及控制器文件),模块名符合php类名规则,显式配置路由与激活模块,并清理运行时缓存。

ThinkPHP模块化不是配个开关就能用,必须目录、命名、路由、缓存四者全对齐,缺一不可。常见 404 或 ClassNotFoundException,90% 是因为其中某一项没对上。
模块目录结构怎么建才不被忽略
框架不会自动创建模块目录,app/admin 这种路径必须手动建,且结构不能少关键子目录。
-
app/admin/下必须有controller/子目录,且至少含一个控制器类文件(如IndexController.php),否则启动时直接报ClassNotFoundException - 模块名只能是合法 PHP 类名:小写字母、数字、下划线,不能以数字开头,不能含短横线(
user-center❌,user_center✅) - 若用 TP6.1+,删掉原始的
app/controller/目录——这是单应用残留,不删会干扰多模块识别 - 模块内可选
model/、view/、config.php,但controller/是硬性门槛
路由声明和模块激活必须显式写死
即使 app/admin 目录存在,不配路由就是 404;不激活模块上下文,/admin/index/index 也可能跳回默认模块。
- 在
config/route.php中必须调用Route::import('admin', 'admin')(TP6+ 多应用模式),第二个参数大小写必须和目录名完全一致 - 启用自动多模块需设
'auto_multi_module' => true,但仅此不够——还得配合'default_module' => 'index'和清理runtime/route/缓存 - 禁用 URL 兼容模式(
app.url_common = false)时,模块名必须出现在 PATH_INFO 第一段:/admin/user/list有效,/index.php?m=admin会被忽略 - 别在
app/admin/route/app.php里再套Route::group('admin', ...),否则实际路径变成/admin/admin/user/list
模块间共享模型和配置的正确姿势
直接复制模型、硬编码数据库配置,短期能跑,长期必埋坑。共享要分层,隔离要靠优先级。
- 通用模型统一放
app/common/model/,用完整命名空间调用,如app\common\model\User;模块专属逻辑用继承扩展,例如app\admin\model\AdminUser extends \app\common\model\User - 模块级配置不要塞进全局
config/,改用app/admin/config/database.php,框架会自动合并,且模块配置优先级高于全局 - 中间件、服务提供者若跨模块复用,检查
app/middleware.php和app/provider.php是否误删了自动加载入口——TP6+ 的模块发现依赖think\facade\App::module()扫描机制
最易被忽略的是缓存清理:改完目录、路由、配置后,runtime/cache/ 和 runtime/route/ 必须清空,否则旧缓存会掩盖所有改动,让你以为配置没生效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











