Как бросить запретное исключение из промежуточного ПО в laravel5?

Я пишу промежуточное программное обеспечение в laravel 5. Я хочу выбросить запрещенное исключение с кодом 403 из промежуточного программного обеспечения. Моя функция промежуточного программного обеспечения приведена ниже:

use Exception;

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

Я звоню со своего промежуточного ПО с контроллера и получаю сообщение об ошибке с кодом 500, но не с 403. Как я могу решить эту проблему?

Ответ 1

Вы можете просто использовать помощник 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);
}