2014-02-15 2 views
1

컨트롤러 api.php에 의해 처리되는 API에 대해 작업 중입니다.한 네임 스페이스의 예외를 다른 네임 스페이스로 변환하는 방법은 무엇입니까?

기본적으로 다른 모델에 모델이 있고 그 네임 스페이스에 예외가 발생합니다.

이러한 예외를 API 예외로 변환하려면 어떻게해야합니까?

그래서 api.php에, 나는, 네임 스페이스 이벤트에서 예외 MyapiException

를 잡아 내 주인 예외 클래스는 EventExceptions라고합니다.

api.php는 이벤트 네임 스페이스의 모델을 호출합니다. 이 모델은 EventExceptions를 발생시킵니다. 이러한 이벤트 예외를 MyApiException (예 : MyApiException 오류 코드 등으로 코드 변환)로 변환하려고합니다.

어디서 할 수 있습니까? api.php에서? 또는 EventException 클래스에서?

답변

1

정확한 예외를 잡거나 부모를 붙잡고 다른 것을 던져 버립니다. 예를 들어 설명해 드리겠습니다.

namespace \MyApp\API; 
class APIException extends \RuntimeException {} 

namespace \MyApp\Event; 
class EventException extends \RuntimeException {} 

이제 우리는 API에서 이벤트 예외를 잡아 내고 싶습니다.

try { 
    $concreteEventInstance->fn(); 
} 
catch (\MyApp\Event\EventException $e) { 

} 

아직까지 문제와 당신이 그 부분을 알고 있지만, 지금 우리는 (어떤 이유), 음, 우리는 단순히 이전을 제외하고 새로운 예외를 발생하는 API 예외로이 예외를 변환 할 수 있습니다.

try { 
    $concreteEventInstance->fn(); 
} 
catch (\MyApp\Event\EventException $e) { 
    throw new \MyApp\API\APIException(
     "My Stackoverflow exception example", 
     42, 
     $e // <-- See how I attach it as previous exception 
    ); 
} 

PHP 5.3.0 이상인 경우에만 새 예외에 이전 예외를 추가 할 수 있습니다.

+0

EventException 클래스의 오류 코드를 ApiException 클래스의 오류 코드 (다른 오류 코드가 있음)로 변환하는 방법은 무엇입니까? 두 개의 오류 코드와 EventException 오류 코드를 ApiException 오류 코드에 매핑하는 함수를 매핑하는 정적 변수가 있다고 생각했습니다. –

+0

다양한 에러 코드를 포함하는 클래스를 정의 할 수 있으며 물론 $ e-> getCode()를 사용하여 예외를 잡을 때 에러 코드에 액세스 할 수 있습니다. – Fleshgrinder

관련 문제