如何在laravel5中向中间件抛出禁止的异常?

时间:2015-03-02 08:48:30

标签: php exception laravel middleware laravel-5

我正在laravel5中编写一个中间件,我想通过中间件的代码403来禁止异常。我的中间件功能如下。

use Exception;
      public function handle($request, Closure $next) {
        if (!Auth::check()) {
            throw new Exception("Access denied", 403);
        }
        return $next($request);
    }

我正在从控制器调用中间件,我收到的代码为500但不是403的错误消息。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:23)

您只需使用abort()帮助程序即可。 (或App::abort()

public function handle($request, Closure $next) {
    if (!Auth::check()) {
        abort(403, 'Access denied');
    }
    return $next($request);
}

您可以通过覆盖App\Exceptions\Handler来处理render()内的这些例外。例如:

public function render($request, Exception $e)
{
    if($e instanceof HttpException && $e->getStatusCode() == 403){
        return new JsonResponse($e->getMessage(), 403);
    }    
    return parent::render($request, $e);
}