2015-03-02 15 views
11

Sto scrivendo un middleware in laravel5, voglio passare attraverso un'eccezione vietata con codice 403 da middle ware. la mia funzione middle ware fornita di seguito.Come lanciare un'eccezione proibita dal middleware in laravel5?

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

sto chiamando middleware dal regolatore e io ottenere il messaggio di errore con il codice 500, ma non 403. Come posso risolvere questo?

risposta

11

È possibile utilizzare semplicemente l'helper abort(). (O App::abort())

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

È possibile gestire queste eccezioni all'interno App\Exceptions\Handler sovrascrivendo render() Per esempio:

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

grazie .. sto sviluppando API REST, quindi voglio generare risposta JSON .Com'è possibile? – gsk

+0

Voglio catturare tutto questo dal gestore delle eccezioni come 'if ($ e instanceof ModelNotFoundException || $ e instanceof NotFoundHttpException || $ e instanceof MethodNotAllowedHttpException) {return new JsonResponse ($ error_response, 404); } ' – gsk

+0

Ho aggiornato la mia risposta. Fammi sapere se hai bisogno di ulteriore aiuto :) – lukasgeiter

Problemi correlati