ThinkPHP6.0中间件全局生效需在app/middleware.php中注册,如appmiddlewareCheckAuth::class;命名空间须正确、handle方法必存;多应用模式下需改用路由级绑定;错误配置位置(如config/middleware.php)将导致失效。

ThinkPHP6.0 中间件要全局生效,关键在于正确注册到 全局中间件配置文件,而不是仅定义类或绑定到路由/控制器。
确认中间件类已正确定义
中间件需放在 app/middleware/ 目录下,例如 CheckAuth.php:
- 命名空间为
appmiddleware - 类可继承
thinkMiddleware(非强制,但推荐),必须有handle方法 -
handle方法接收$request和$next参数,并返回$next($request)或提前响应
在 app/middleware.php 中注册
这是全局启用的唯一有效位置。打开 app/middleware.php,返回一个数组,把中间件类名以字符串形式写入:
<?php return [
ppmiddlewareCheckAuth::class,
hinkmiddlewareLoadLangPack::class, // 如需多语言自动侦测
];
- 必须使用完整命名空间 +
::class常量(推荐)或带反斜杠的字符串,如'app\middleware\CheckAuth' - 顺序即执行顺序,靠前的先执行
- 系统内置中间件(如
LoadLangPack、SessionInit)也通过此方式加载
注意多应用模式下的特殊处理
如果你用的是 ThinkCMF 等基于 TP6 的多应用项目,app/middleware.php 可能不被自动加载:
- 此时需改用路由级全局绑定,在对应应用的路由文件中(如
app/admin/route/app.php或data/route/route.php)显式调用Route::rule(...)->middleware() - 或在应用入口路由分组中统一绑定:
Route::group('admin', function () { ... })->middleware(ppdminmiddlewareCheck::class);
验证是否生效
启动请求后,可在中间件 handle 方法中加日志或调试输出:
Log::info('CheckAuth middleware executed');
// 或直接抛异常测试:throw new Exception('middleware running');
- 如果日志没出现、异常没抛出,说明未注册成功或路径/命名空间写错
- 检查是否误将配置写在了
config/middleware.php(TP6 没这个文件)或app.php中
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











