Laravel中闭包路由加中间件有两种方式:一是单个路由链式调用->middleware(),支持字符串、数组或带参形式如'throttle:60,1';二是分组方式,用Route::middleware(['auth'])->group()或Route::group(['middleware'=>['auth']], function(){})批量应用,闭包内路径须为相对路径,修改后需运行php artisan route:clear生效。

在 Laravel 中,用闭包定义路由并加中间件非常直接,核心就两条路:单个路由绑定中间件,或者一组闭包路由统一加中间件。不需要控制器、不依赖类路径,适合轻量逻辑或快速原型。
单个闭包路由加中间件
最简单的方式,就是在 Route::get()、Route::post() 等方法链式调用 ->middleware():
- 写法示例:
Route::get('/profile', function () { return view('profile'); })->middleware('auth'); - 支持多个中间件,传数组:
->middleware(['auth', 'verified']) - 还能传参数,比如限流:
->middleware('throttle:60,1')或角色检查:->middleware('role:admin') - 注意:中间件名必须已在
app/Http/Kernel.php的$routeMiddleware中注册过
一组闭包路由批量加中间件
当多个路由需要共用相同中间件(和前缀、命名空间等)时,推荐用分组方式,避免重复写 middleware:
- 用
Route::middleware(['auth'])->group(function () { ... })最简洁,Laravel 5.5+ 支持 - 闭包内所有子路由自动继承该中间件,路径写相对形式,如
Route::get('dashboard', ...),别写/dashboard - 也可以用传统
Route::group(['middleware' => ['auth']], function () { ... }),兼容性更好 - 分组里还能嵌套分组,比如先加 auth,再在子分组里加 admin 权限
中间件参数怎么传给闭包路由
参数不是靠闭包自己接收,而是由 Laravel 框架在调用中间件的 handle() 方法时,根据签名自动注入:
- 路由中写
->middleware('role:admin,editor') - 对应中间件
CheckRole的handle($request, Closure $next, ...$roles)就能收到['admin', 'editor'] - 参数顺序严格对应冒号后逗号分隔的值,框架用反射机制完成绑定
- 常见用途包括角色控制、缓存时长、租户 ID 等
改完记得清缓存
开发阶段修改了 routes/web.php 或 routes/api.php 后:
- 运行
php artisan route:clear清掉路由缓存 - 否则新写的闭包路由或中间件绑定不会生效
- 生产环境还要配合
php artisan config:clear和php artisan view:clear(如果涉及视图)











