2015-10-30 9 views
7

मैं लैरवेल 5 का उपयोग कर एक अत्याधुनिक एप्लिकेशन पर काम कर रहा हूं और मैं अपवादों को पकड़ने और उचित प्रतिक्रिया उत्पन्न करने की कोशिश कर रहा हूं। मैं tymondesigns/jwt-auth पैकेज का भी उपयोग कर रहा हूं ताकि सभी एपीआई प्रतिक्रिया जेएसएंड जेएसओएन प्रारूप में हों।tymondesigns/jwt-auth पैकेज द्वारा उत्पन्न लार्वेल 5 में वैश्विक अपवाद कैसे प्राप्त करें?

अभी मैं TokenExpiredException पकड़ने की कोशिश कर रहा हूं जो तब उत्पन्न होता है जब दिया गया टोकन निश्चित रूप से समाप्त हो जाता है। इसलिए मैं Handler.php में यह करने की कोशिश की:

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

लेकिन मैं अभी भी इस अपवाद को पकड़ने और एक JSON प्रतिक्रिया वापस देने में सक्षम नहीं हूँ।

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

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

और::

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

कैसे Laravel में अन्य अपवाद को संभालने के लिए हालांकि मैं जैसे अन्य अपवाद के लिए यह करने के लिए कर रहा हूँ?

उत्तर

4

ऐसा लगता है मैं नाम स्थान का उपयोग करना भूल गया:

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

छोटे गलतियों! फेसपाल्म

+0

यह अभी भी Laravel 5.4 के साथ काम करता: मूल अपवाद अभी भी है, तो त्रुटि हैंडलिंग अब यह कुछ ऐसा दिखाई देगा विधि getPrevious() के साथ उपलब्ध है? क्योंकि मैंने इसे ऊपर के रूप में सेट किया है लेकिन यह अभी भी अपवाद को पकड़ नहीं रहा है – gthuo

2

अगर कोई नया लैरवेल (5.4) और jwt-auth (1.0। * @ Dev) के लिए एक ही समस्या के साथ यहां सोच रहा है ... अब इसके लिए एक और कारण/समाधान है।

प्रदाता \Tymon\JWTAuth\Exceptions\TokenExpiredException का उदाहरण कैच करता है और Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException का उदाहरण देता है।

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); 
} 
संबंधित मुद्दे