web-dev-qa-db-ja.com

laravel5のミドルウェアから禁止された例外をどのようにスローしますか?

私はミドルウェアをlaravel 5.で記述しています。ミドルウェアからのコード403で禁止例外をスローしたいのですが、ミドルウェア関数は以下のとおりです。

use Exception;

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

コントローラからミドルウェアを呼び出していますが、403ではなくコード500のエラーメッセージが表示されます。これを解決するにはどうすればよいですか?

25
gsk

単にabort()ヘルパーを使用できます。 (またはApp::abort()

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

render()をオーバーライドすることにより、_App\Exceptions\Handler_内でこれらの例外を処理できます。次に例を示します。

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