php - 将数组传递给laravel中的中间件

标签 php laravel authentication middleware

我在名为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/

相关文章:

Laravel/ Eloquent : Search for rows by value in polymorphed table

php - 找不到两位数的月份 Laravel 中缺少数据

javascript - 使用具有安全用户名和密码的 API,即身份验证

php - Swift 3 如何转换此函数以返回 json 变量的内容

php - 从 SQL 表中获取文件列表,在 PHP 中显示并检查文件是否有效

php - 哪个消耗的资源少?打开文本文件或进行 sql 查询,都一千次?

php - 阿拉伯语查询字符串 - url 未存储和显示

php - 使用 Laravel Migration 使列自动递增

php - Laravel 5.3 尝试为真但 Auth::User 返回 null?

php - 验证功能在 WordPress 中不起作用