thinkphp6中间件是请求响应拦截器,用于权限校验、日志记录等;需实现handle方法并返回response对象;支持全局、路由、控制器三级注册;前置逻辑放$next前,后置放后;可传参、读取请求信息、统一处理响应。

ThinkPHP6 中间件是处理请求和响应的“拦截器”,不修改控制器本身,就能统一做权限校验、日志记录、参数过滤、跨域设置等操作。核心就三点:写一个 handle 方法、注册它、决定在哪用。
怎么创建中间件
最简单的方式是用命令行生成:
-
php think make:middleware AuthCheck —— 自动生成
app/middleware/AuthCheck.php - 文件里默认有
handle($request, \Closure $next)方法,这是唯一必须实现的入口 -
注意:方法必须返回 Response 对象(
$next($request)返回的就是),不能只 echo 或 return 字符串
中间件三种注册和使用方式
同一个中间件类,可以按需在不同层级启用:
-
全局中间件:所有请求都经过它。在
app/middleware.php的返回数组中添加:\app\middleware\AuthCheck::class -
路由中间件:只对某条或某组路由生效。例如:
Route::get('admin/user', 'admin.user/index')->middleware(\app\middleware\AuthCheck::class); -
控制器中间件:整个控制器都受控。在控制器类顶部加:
protected $middleware = [\app\middleware\AuthCheck::class];
前置 vs 后置逻辑怎么写
关键看 $next($request) 出现在哪一行:
- 放在前面 → 先执行中间件代码,再放行请求(适合登录检查、参数预处理)
- 放在后面 → 先让请求走完控制器,再执行中间件代码(适合记录日志、统计耗时、修改响应头)
- 还可以加
end(Response $response)方法,在响应真正输出前最后介入(比如统一加 header、捕获异常状态)
常见实用小技巧
- 中间件里可以直接读取
$request->param()、$request->header()、$request->ip()等 - 想跳转或返回错误,用
return redirect(...)或return json([...]),别用exit - 支持第三个参数传参,比如
->middleware(AuthCheck::class, ['admin']),handle 方法签名改为handle($request, $next, $role) - 多个中间件顺序很重要:全局 middleware.php 数组靠前的先执行;路由或控制器里链式调用的,从左到右依次执行
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











