web-dev-qa-db-fra.com

Comment lever l'exception interdite du middleware dans laravel5?

J'écris un middleware en laravel 5. Je veux lever une exception interdite avec le code 403 du middleware. Ma fonction middleware est donnée ci-dessous:

use Exception;

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

J'appelle mon middleware depuis le contrôleur et j'obtiens un message d'erreur avec le code 500 mais pas 403. Comment puis-je résoudre ce problème?

25
gsk

Vous pouvez simplement utiliser l'assistant abort(). (Ou App::abort())

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

Vous pouvez gérer ces exceptions dans App\Exceptions\Handler En remplaçant render() Par exemple:

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