在 laravel 5.8 中为单一路由正确添加多个中间件时,必须以数组形式传入 middleware() 方法,如 ->middleware([‘auth’, ‘prevent-back-history’]);直接传入多个字符串参数属于无效语法(虽部分版本可能“侥幸”运行,但不符合框架规范且不可靠)。
Laravel 的 middleware() 路由方法签名明确要求单一参数:该参数可为字符串(单个中间件)或字符串数组(多个中间件)。查看 Laravel 5.8 源码(Illuminate\Routing\Router 类中 middleware() 方法定义),其接收参数类型为 string|array,而非可变参数列表(variadic)。因此以下写法:
->middleware('prevent-back-history','auth') // ❌ 错误:多参数传递,仅第一个生效或触发未定义行为
虽在某些 PHP 环境下未立即报错(因 Laravel 内部可能忽略多余参数),但实际只有第一个中间件(’prevent-back-history’)会被注册,’auth’ 将被 silently 丢弃——这极易引发权限控制失效等严重安全隐患。
✅ 正确且唯一推荐的写法是使用索引数组: