我在名为rolMiddleware的中间件中得到了这个句柄:
public function handle($request, Closure $next, $roles)
{
//dd($request->user());
foreach ($roles as $rol) {
if ($request->user()->getTipoUsuario($request->user()->tipo_usuario_id)->getNombreTipoUsuario() == $rol) {
return $next($request);
}
}
abort(403, "¡No hay autorizacion!");
}
但是$ roles是一个数组,这是我使用中间件的路线:
Route::get('/mid', ['middleware' => 'roles:super admin', function () {
return "done";
}]);
而给我的错误是:
ErrorException in RolMiddleware.php line 22:
Invalid argument supplied for foreach()
您可能不需要使用数组,因为我只在 super 管理员中使用它,对于该路由,我只需要 super 管理员,但是有些路由可能适用于 super 管理员和某个区域的管理员。
最佳答案
在laravel中,您可以使用逗号,
分隔要传递给中间件的参数,如下所示:
Route::get('/mid', ['middleware' => 'roles:super,admin', function () {
// ^ note this
return "done";
}]);
请注意,这不会将参数作为数组发送,因此除非您将传递的参数用作ellipsis parameters,否则不能循环
$roles
,如下所示:public function handle($request, Closure $next, ...$roles)
相反,您将需要为每个角色使用一个参数:
public function handle($request, Closure $next, $role1, $role2) // .... and so on
关于php - 将数组传递给laravel中的中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43685610/