2016-07-07 15 views
1

Ich habe den folgenden Code -Wie erhalte ich mehr als einen Ausnahmetyp?

public function getPosts($limit = 25, $author = null) { 

    try { 

    } catch(\GuzzleHttp\Exception\ClientException $e) { 
     return []; 
    } 

    return []; 
} 

ich dieses b/c hinzugefügt, wenn die Seite 404s ich die ClientException bekommen, aber wenn der Server einen Fehler 500 zurück erhalte ich eine ServerException - versucht zu ersetzen ich dies nur mit catch(Exception $ex) , aber ich bekomme immer noch den unbehandelten/nicht abgefangenen Ausnahmefehler.

Antwort

1

Liste nur mehrere Fänge:

try { 
    ... 
} catch (FooException e) { 
    ... 
} catch (BarException e) { 
    ... 
} catch (Exception e) { 
    ... 
} 
2

Sie können für verschiedene Ausnahmetypen in PHP mehrere catch-Blöcke:

try { 

    } catch(\GuzzleHttp\Exception\ClientException $e) { 
     return []; 
    } catch(\GuzzleHttp\Exception\ServerException $e) { 
     //handle it... 
} 

jedoch die Annahme, die Guzzle Ausnahmen die allgemeine PHP Exception Klasse erweitern (was sie natürlich tun), sollte es nur Exception $e ändern. Sind Sie sicher, dass hier die Ausnahme ausgelöst wird?

Auf der guzzle Website http://docs.guzzlephp.org/en/latest/quickstart.html#exceptions Sie GuzzleHttp\Exception\TransferException Basis für alle Client/Server-Erweiterungen sehen können, so dass Sie nur eine GuzzleHttp\Exception\TransferException zu fangen versuchen könnte;

+0

Dank - Ich habe gerade woanders überprüft und ich hatte einen anderen Ort, der mit Hilfe von GuzzleHttp ohne die Ausnahmen zu fangen - Ersetzen mit nur "Exception $ e" gearbeitet. – 5SK5

+0

@ 5SK5 Ich empfehle generell, die granularste Ausnahme vernünftig zu verwenden. – Ray

0

Der Catch kann zur Behandlung mehrerer Fehlertypen nacheinander verkettet werden.

public function getPosts($limit = 25, $author = null) { 

    try { 

    } catch(\GuzzleHttp\Exception\ClientException $e) { 
     return []; 
    } catch(\GuzzleHttp\Exception\ServerException $e) { 
     return []; 
    } 

    return []; 
} 
+1

Es wird besser sein, wenn Sie weitere Details angeben. Benutze zumindest die Exceptions in der OP-Frage und vergiss den Root-Namespace (führender Backslash) nicht! –

+0

@ IsmailRBOUH danke. machte den Schnitt. Ist es jetzt lesbarer? – Iceman

0

Just keep

public function getPosts($limit = 25, $author = null) { 

    try { 

    } catch(\GuzzleHttp\Exception\ClientException $e) { 
     return []; 
    } catch (ServerException) { 
     //some code 
    } 

    return []; 
} 

sich bewusst sein Namensräume zu kontrollieren, wenn Sie versuchen, Ausnahme zu fangen sie alle Ausnahmen abfangen, wenn es nicht, vielleicht didnt Sie die Ausnahme als die Verwendung Ausnahme sind oder versucht, \ Exception