2013-10-14 9 views
7

Ich habe eine Methode, die überprüft, ob ein Benutzer gültige Session-Informationen hat. Dies sollte eine Ausnahme werfen, Guzzle\Http\Exception\BadResponseException aber wenn ich versuche, es zu fangen:So umgehen Sie Laravel Exception-Behandlung

catch (Guzzle\Http\Exception\BadResponseException $e) 
{ 
    return false; 
} 
return true 

Laravel nicht auf diesen Code nicht zu erhalten und sofort beginnt es Handhabung eigene Fehler ist. Und Ideen, wie man Laravels eigene Implementierung umgehen und meinen eigenen Catch verwenden kann.

EDIT: Ich habe gerade herausgefunden, dass Laravel den gleichen Exception-Handler wie Symfony verwendet, also habe ich auch das Symfony2-Tag hinzugefügt.

EDIT 2:

Ich reparierte Art das Problem durch Ausnahmen Guzzle und Überprüfung der Rückgabe-Kopfzeile manuell deaktivieren. Es ist ein bisschen eine Abkürzung, aber in diesem Fall macht es den Job. Danke für die Antworten!

+0

Können Sie nach relevanter Code (einschließlich 'try' Block) –

Antwort

9

Eigentlich kann diese Ausnahme in Laravel fangen werden, man muss nur respektieren (und verstehen) Namespacing:

Wenn Sie

namespace App; 

haben, und Sie tun

catch (Guzzle\Http\Exception\BadResponseException $e) 

PHP versteht dass Sie versuchen,

catch (\App\Guzzle\Http\Exception\BadResponseException $e) 

Also, für sie zu arbeiten brauchen Sie nur einen Schrägstrich:

catch (\Guzzle\Http\Exception\BadResponseException $e) 

Und es wird funktionieren.

+0

Rückblickend sind Sie völlig richtig! – Martijn

+1

Wow !! Sie sollten also beachten, Namespacing fangen (Ausnahme e) wird nicht funktionieren sollte es catch (\ Exception e) sein – manish

2

Standardmäßig enthält die Datei app/start/global.php einen Fehlerhandler für alle Ausnahmen. Sie können jedoch bei Bedarf weitere Handler angeben. Handler werden basierend auf der type-hint der Exception, die sie behandeln, aufgerufen. Zum Beispiel können Sie einen Handler erstellen, die nur Ihre BadResponseException Instanzen behandelt, wie

App::error(function(Guzzle\Http\Exception\BadResponseException $exception) 
{ 
    // Handle the exception... 
    return Response::make('Error! ' . $exception->getCode()); 
}); 

Stellen Sie außerdem sicher, dass Sie eine gut definierte (BadResponseException) Klasse. Lesen Sie mehr auf Laravel Documentation.

+2

** Hinweis: ** dass Laravel wird auch weiterhin die Verantwortung für die Handhabung, den Fehler zu seinen registrierten Handler vergehen, bis man einen' Response' Objekt zurückgibt . Laravel verwendet die [Verantwortungskette] (http: // en.wikipedia.org/wiki/Chain-of-responsibility_pattern) Muster beim Umgang mit Fehlern. Damit können Sie den Fehler auf beliebige Weise behandeln. Sie können etwas wie den Guzzle-Fehler protokollieren und dann die anderen Fehlerhandler von Laravel entscheiden lassen, wie sie reagieren sollen. Siehe [dieser Blog-Beitrag] (http://fideloper.com/laravel4-error-handling "Laravel Fehlerbehandlung") für weitere Erklärungen. – fideloper

+2

Dies ist keine Antwort auf "wie man es umgehen kann?" und handle mit der Ausnahme in meiner Methode, nachdem ich etwas aufgerufen habe, das einige Ausnahmen auslösen könnte. Warum sollte ich Code außerhalb meiner Klasse schreiben, um mit Dingen umzugehen, mit denen meine Klasse umzugehen weiß? Sehen Sie sich die Cartalyst-Beispiele von Sentry an: http://docs.cartalyst.com/sentry-2/authentication/login. Das sind Sachen, die nie auf Laravel funktionieren werden. –

+0

@AntonioCarlosRibeiro, die Frage, ich habe darüber nachgedacht, wie Sie Ihre eigene Fehlerbehandlung registrieren, liege ich falsch? –

2

Statt Code

catch (Guzzle\Http\Exception\BadResponseException $e) 
{ 
    return false; 
} 
return true 

Verwendung dieser Lösung

catch (\Exception $e) 
{ 
    return false; 
} 
return true 

alle möglichen Ausnahmen von Guzzle geworfen zu fangen.

Wenn Sie explizit eine BadResponseException fangen wollen Sie auch Ihre Ausnahme der Klasse Namespace mit prepend kann ‚\‘.

catch (\Guzzle\Http\Exception\BadResponseException $e) 
{ 
    return false; 
} 
return true 
Verwandte Themen