2016-09-30 5 views
0

RESTler API 프레임 워크에서 Silex로 전환하는 중입니다. 도전 과제의 일부는 API를 사용하는 앱이 프로덕션 환경에 종속되어 있기 때문에 API의 응답이 변경되지 않도록하는 것입니다. 현재 아웃 - 오브 - 박스 렉스 2.0 우리 JSON 오류 처리기를 가로 채고이로 대체됩니다 :Silex JSON 스타일 응답

Whoops Message

내가 응답으로 필요한 것은 : 내가했습니다

{ 
    "error": { 
    "code": 400, 
    "message": "This API key is not authorized to complete the operation" 
    } 
} 

솔루션의 단편을 찾았지만 대부분 오래된 버전이거나 Silex 2.0에서 작동하지 못했습니다.

난 쉽게 내 모든 컨트롤러를 다시 작성하라고 강요

if (!$controllerResponseData) { 
    $error = array('message' => 'This API key is not authorized to complete the operation'); 
    return $app->json($error, 400); 
} 

그러나이 경로의 수준에서 수행되어야 할 것이다 할 수있다. 그들은 오류를 관리하지 않으며, 비즈니스 논리 및 모델 계층에서 훨씬 더 깊게 처리됩니다.

어쨌든 Silex의 기본 오류 처리를 무시하고 있습니까? 또한 가장 이상적인 것은 디버깅을위한 오류 처리 기능을 갖추고 있지만 프로덕션 환경이나 로컬 테스트를위한 JSON 오류 응답으로 쉽게 전환 할 수 있다는 것입니다.

+0

[오류 처리기] (http://silex.sensiolabs.org/doc/master/usage.html#error-handlers)를 살펴 보았습니까? – Samundra

+0

@Samundra 예, 이것은 실제로 문제의 일부입니다. 일부 비즈니스 로직, 유효성 검사기 및 모델 레이어로 가져 오려면 전체 응용 프로그램에 $ app을 전달해야합니다. 나는 단지 내가 교향곡이라고 생각하는 것으로 포착되는 것에서 예외를 가로 챌 필요가있다. 내가 어디서 새로운 RestException (400, 'some message')를 던지 냐고 물어 봤는데 요. – SeaFuzz

답변

0

건설용 캐치를 사용하십시오. 예 :

try{ 
    // your code 
} catch(\Namespace\RestException $e) { 
    $error = array('message' => 'This API key is not authorized to complete the operation'); 
    return $app->json($error, 400); 
}