2017-11-16 26 views
0

나는 아래의 컨트롤러를 사용하여 laravel에서 딩고 API를 사용하면서 발생하는 500 개의 오류를 처리하는 방법을 보여주었습니다. 500 오류가 발생하여 클라이언트에 도달하지 못하게 할 때이를 탐지 할 수 있기를 원합니다. 클라이언트와 공유 할 정보가 너무 많아서 Laravel에서만 기록해야하기 때문입니다.Laravel Dingo API - 500 로그 오류 만, API를 통해 오류 세부 정보를 보내지 않습니까?

때문에 오타에 의도적으로 500 오류를 반환 getUser() 방법은 firsgt()

class TestController extends Controller { 
    public function getUser() { 
    $data = User::firsgt(); //returns 500 error 
    return $data; 
    } 
} 

이 클라이언트가 보는 것입니다 : 내 컨트롤러에서 enter image description here

, 내가 수동으로 오류를 처리 성공을 반환하여/컨트롤러 내에서 json 응답 오류가 발생하지만 예상하지 못한 오류가 발생하면 API가 반환하고 클라이언트가 볼 수있는 세부 정보가 너무 많습니다. 대신, 이러한 예기치 않은 오류는 일반적인 오류가 발생한 응답을 반환하기 위해 일종의 처리기로 버블 링되어야합니다. Laravel에서 APP_DEBUG = false.env으로 설정하면 laravel (하지만 dingo api에는 해당되지 않음)에서 작동하지만 이는 영향을 미치지 않으며 전체 오류가 클라이언트에 반환됩니다. 균열을 빠져 나가는 실수에 대한 안전망을 찾고 있습니다.

'정의되지 않은 메소드 App \ User :: firsgt()'에 대한 클라이언트의 너무 많은 세부 정보 대신 '오류가 발생했습니다'와 같은 오류 메시지를 어떻게 반환 할 수 있습니까?

참고 : 나는이 클라이언트에 반환되기 전에 각 컨트롤러 방법 하나 하나 처리, 대신 모든 500을 캡처 할 및 사용자 지정 500 일반적인 메시지를 반환하지 않는

+0

:message 교체

는 서로 다른가요? – Jamesking56

+0

아니요, env가 프로덕션으로 설정된 경우 실제 오류가 여전히 반환됩니다. – Wonka

답변

1

당신 '오류가 발생했습니다' 귀하의 딩고 구성을 확인하고이 두 매개 변수를 false로 설정해야합니다.

APP_DEBUG=false 
API_DEBUG=false 

여전히 문제가 발생하는 경우 댓글에 제안 된대로 제작 중인지 확인하십시오.

마지막으로 여전히 동일한 필드를 false로 설정 한 후 존재하지 않아야하는 동일한 문제가있는 경우 this issue (2015 년 이후로 거슬러 올라감)을 확인하는 것이 좋습니다.

코멘트 중 하나에서 수정 (그대로) 말한다 :

app(\Dingo\Api\Exception\Handler::class)->register(function (\Exception $exception) { 
    if (!env('API_DEBUG') && !$exception instanceof \Symfony\Component\HttpKernel\Exception\HttpException) { 
     // Whatever other handling you want goes here.. 

     // Mimic the normal API response with a different message 
     return \Response::make([ 
      'message'  => 'Internal server error', 
      'status_code' => 500, 
     ], 500); 
    } 
}); 

나는이 나 자신을 테스트 didnt는 것을 조심하십시오.

0

아직 아직 수행하지 않은 경우, 개방 config/api.php 딩고 설정 파일 그리고

php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider" 

를 게시하고 당신이 원하는 메시지에 errorFormat 값을 편집 할 수 있습니다. 당신의 ENV가 생산으로 설정된 경우 일반적인 메시지

+0

정말 제대로 작동하고 싶었지만 'message occurred'가 'Error occurred'로 채워지면 정확히 찾고있는 것을 정확하게 보여줍니다. 그러나 불행히도 이 'return $ this-> response-> array (['error '=> true,'message '=>'중복 된 엔트리, 다시 시도하십시오 '와 같은 컨트롤러에서 커스텀 에러 핸들링에서 설정 한' > setStatusCode (300);''오류 발생 '을': message'로 하드 코딩하면 중복 입력 오류가 발생하지 않습니다. 중복 입력 오류가 클라이언트에 대해 변형 된 '오류 발생'및 '오류 발생'덮어 쓰기 오류를 덮어 써서는 안됩니까? – Wonka