thinkphp5与tp6路由中间件绑定语法不同:tp5需在route.php中用middleware键数组挂载并注册别名,tp6支持链式调用且路径严格大小写敏感;中间件须置于app/middleware/下,类名匹配文件名、含handle方法且类型提示完整。

在ThinkPHP中为特定路由绑定中间件,必须明确区分TP5与TP6的语法结构和配置路径——TP5用数组键值对方式注册,TP6则依赖闭包链式调用且中间件类路径写法更严格,写错一个斜杠或大小写就会导致中间件完全不生效。
ThinkPHP5路由中间件挂载
TP5中间件挂载只支持在路由定义时通过middleware键传入数组,不支持全局自动注入到单条路由。
第一步:在route/route.php中定义带中间件的路由,写法必须是['middleware' => ['auth']]这种键值对形式。
第二步:确保app/middleware.php已注册该中间件别名,例如'auth' => \app\middleware\Auth::class,否则会报“Middleware not found”错误。
第三步:若中间件需传参,只能通过构造函数注入,不能在路由定义里传参——TP5不支持->middleware(Auth::class, ['role=admin'])这类写法。
ThinkPHP6路由中间件挂载
TP6支持三种挂载方式,推荐使用分组+链式调用,语义清晰且不易漏配。
方法一:单条路由挂载
在route/app.php中写:Route::get('admin/user/list', 'admin/User/list')->middleware(\app\middleware\Auth::class);
方法二:路由分组批量挂载
用Route::group()包裹子路由,再统一调用->middleware():Route::group('admin', function () { Route::get('user/list', 'admin/User/list'); Route::post('user/add', 'admin/User/add'); })->middleware(\app\middleware\Auth::class);
方法三:闭包路由中挂载
闭包路由必须显式调用->middleware(),否则中间件不会触发:Route::get('api/data', function () { return json(['msg' => 'ok']); })->middleware(\app\middleware\Cors::class);
【注意:TP6中间件类路径必须用反斜杠\开头,且大小写敏感——写成app\middleware\auth或App\Middleware\Auth都会失败】
中间件文件位置与命名规范
第一步:中间件文件必须放在app/middleware/目录下(TP6多应用模式下需放对应应用的app/{app_name}/middleware/)。
第二步:类名必须与文件名一致,且首字母大写,例如文件Auth.php对应class Auth。
第三步:中间件类必须有handle方法,接收$request和$next两个参数,且必须返回$next($request)或提前返回Response对象。
第四步:TP6中handle方法签名必须为public function handle($request, \Closure $next),少一个\Closure类型提示会导致运行时抛出Fatal error: Uncaught TypeError。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











