2016-07-07 2 views
1

나는 다음과 같은 코드가 - 페이지 404 나는 서버가 500 오류를 반환하지만 경우 ClientException을 얻을 때 나는이 B/C를 추가 하나 이상의 예외 유형을 어떻게 catch합니까?

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

    try { 

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

    return []; 
} 

내가 얻을를 ServerException - 그냥 catch(Exception $ex)와이 교체 시도 , 아직 처리되지 않은/잡히지 않은 예외 오류가 나타납니다.

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

답변

1

은 여러 어획량 목록 어느 쪽이 당연한가), 단지 Exception $e으로 변경하면 효과가 있습니다. 예외가 던져지고있는 곳이 확실합니까?

guzzle 사이트 http://docs.guzzlephp.org/en/latest/quickstart.html#exceptions에서 모든 클라이언트/서버 확장에 대한 GuzzleHttp\Exception\TransferException 기반을 볼 수 있으므로 GuzzleHttp\Exception\TransferException을 잡으려고 할 수 있습니다.

2

당신은 PHP에서 다른 예외 유형에 대해 여러 catch 블록을 가질 수있다 : 그러나

try { 

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

는이 목구멍 예외 (일반 PHP Exception 클래스를 확장 가정

+0

고마워 - 방금 다른 곳을 확인했고 GuzzleHttp를 사용하여 예외를 잡아 내지 않고 다른 장소를 사용하고있었습니다. 예외를 'Exception $ e'로 바꾸면 효과가있었습니다. – 5SK5

+0

@ 5SK5 일반적으로 알맞은 예외를 사용하는 것이 좋습니다. – Ray

0

여러 오류 유형을 처리하기 위해 캐치를 차례로 연결할 수 있습니다.

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

    try { 

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

    return []; 
} 
+1

자세한 내용을 입력하는 것이 좋습니다. 최소한 OP의 질문에 예외를 사용하고 루트 네임 스페이스 (백 슬래시 선도)를 잊지 마십시오! –

+0

@IsmailRBOUH 고맙습니다. 편집했습니다. 지금은 더 읽을 수 있습니까? – Iceman

0

그냥 어쩌면 당신이 사용 예외 또는 시도와 같은 예외를 포함 didnt는, 당신이 모든 예외를 잡을 것입니다 예외를 잡으려고 경우가하지 않은 경우, 이름 공간을 인식

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

    try { 

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

    return []; 
} 

을 잡기 유지 catch \ Exception

관련 문제