Laravel8应用auth中间件报Array to string conversion错误如何解决
问题诱因
该错误由Laravel路由组的传参规则混用导致:
Laravel 8及以上版本中,Route::group()存在两种合法传参模式:
- 所有路由组配置(中间件、前缀、命名空间等)全部放入第一个数组参数,第二个参数传路由闭包
- 所有配置项通过链式方法(
middleware()/prefix()等)提前声明,group()仅传一个闭包参数
你当前的写法混用了两种模式:先链式调用middleware(),又给group()传入了前缀配置数组,Laravel底层解析路由参数时会将传入的配置数组错误识别为路由回调参数,触发数组转字符串的类型报错。移除middleware()链式调用后,Laravel会识别为第一种传参模式,所以不会报错。
正确实现方式
写法1:全链式声明(官方推荐)
将所有配置项都通过链式方法声明,group()仅传入闭包:
Route::middleware(['auth']) ->prefix('admin') ->group(function () { Route::get('/', [\App\Http\Controllers\AdminController::class, 'index']); });
写法2:全配置数组声明
将中间件、前缀都放入group()的第一个配置数组中:
Route::group([ 'middleware' => ['auth'], 'prefix' => 'admin' ], function () { Route::get('/', [\App\Http\Controllers\AdminController::class, 'index']); });
如果后台使用单独的身份认证guard,可将中间件调整为auth:guard名称格式,例如auth:admin即可适配自定义guard的身份校验。
内容的提问来源于stack exchange,提问作者xabise
相关产品推荐
相关产品推荐

