控制器上角色 Zizaco/entrust 上的中间件,但如果用户没有角色,它会给出 HttpException

middleware on role Zizaco/entrust on controller but if user dont have the role it gives HttpException

所以在我的 laravel 项目中我有 3 个角色 admin employee vendor 并且每个角色在控制器中都有它们的控制器我已经放置了角色的中间件并且它工作没问题但我不喜欢当用户没有角色时它会给出 HttpException 错误我如何更改而不是让用户 HttpException 将他重定向回或 404 未找到页面继承人我的控制器

public function __construct()
{
    $this->middleware('auth');
    $this->middleware('role:employee');
}

你可以在角色检查发生之前检查用户是否在闭包中间件中有任何角色

// your controller 
public function __construct()
{
    $this->middleware('auth');
    $this->middleware(function ($request, $next) {
        return !auth()->user()->role ? redirect->back() : $request($next);
    });
    $this->middleware('role:employee');
}

或者在异常处理程序中添加对 HttpException 的检查 class 并从那里重定向。

任何对异常处理的小的自定义都可以在 App\Exceptions\Handler 的 render() 函数中完成。在这种情况下,您可能会在渲染函数中执行类似这样的操作。

//change all 403's to 404's
if($exception->getCode() == 403){
    throw new NotFoundHttpException();
}