2015-10-30 13 views
7

Laravel 5 kullanarak RESTful bir uygulama üzerinde çalışıyorum ve istisnaları yakalamaya ve uygun bir yanıt oluşturmaya çalışıyorum. Ayrıca tüm API yanıtlarının JSend JSON biçiminde olmasını sağlamak için tymondesigns/jwt-auth paketini kullanıyorum.Tymondesigns/jwt-auth paketi tarafından oluşturulan laravel 5 global istisnalar nasıl yakalanır?

Şu anda, verilen belirtecin süresi dolduğunda ortaya çıkan TokenExpiredException kodunu yakalamaya çalışıyorum. Bu yüzden Handler.php bu çalıştı:

if($e instanceof TokenExpiredException) 
{ 
    return jsend()->error() 
      ->message("Token Expired") 
      ->code(403) 
      ->data([null]) 
      ->get(); 
} 

Ama yine de bu durum yakalamak ve JSON yanıtını geri vermek mümkün değilim.

if ($e instanceof ModelNotFoundException) { 
    $e = new NotFoundHttpException($e->getMessage(), $e); 

    return jsend()->error() 
       ->message("404 Model Not Found") 
       ->data([null]) 
       ->get(); 
} 

Ve:

if ($this->isHttpException($e)) 
{  
    if($e instanceof NotFoundHttpException) 
    { 
     return jsend()->error() 
       ->message("404 Route Not Found") 
       ->data([null]) 
       ->get(); 
    } 
    return $this->renderHttpException($e); 
} 

nasıl laravel diğer istisnalar işlemek için böyle diğer istisnalar için yapmak mümkün duyuyorum rağmen?

if($e instanceof \Tymon\JWTAuth\Exceptions\TokenExpiredException) 
{ 
    return jsend()->error() 
      ->message("Token Expired") 
      ->code(403) 
      ->data([null]) 
      ->get(); 
} 

Küçük hatalar:

cevap

4

Ben ad kullanmayı unuttum görünüyor! facepalm

+0

bu hala laravel 5.4 ile çalışır mı: Orijinal istisna, bu nedenle hata işleme şimdi böyle bir şey olmazdı hala yöntemle getPrevious() kullanılabilir? Çünkü yukarıdaki gibi ayarlamıştım ama yine de istisnayı yakalamıyor. – gthuo

2

Burada birileri yeni Laravel (5.4) ve jwt-auth (1.0. * @ Dev) için aynı sorunla ilgileniyorsa, şimdi bunun için başka bir neden/çözüm var.

Sağlayıcı, \Tymon\JWTAuth\Exceptions\TokenExpiredException örneğini yakalar ve Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException örneğini yeniden gösterir.

public function render($request, Exception $exception) 
{   
    if ($exception->getPrevious() instanceof \Tymon\JWTAuth\Exceptions\TokenExpiredException) { 
     return response()->json(['error' => $exception->getPrevious()->getMessage()], $exception->getStatusCode()); 
    } else if ($exception->getPrevious() instanceof \Tymon\JWTAuth\Exceptions\TokenInvalidException) { 
     return response()->json(['error' => $exception->getPrevious()->getMessage()], $exception->getStatusCode()); 
    } 

    return parent::render($request, $exception); 
}