2017-11-15 15 views
0

API를 가지고있는 500 개의 오류를 처리하는 문제를 설명하기 위해 아래 컨트롤러를 만들었습니다. 500 오류가 발생하여 클라이언트에 도달하지 못하게 할 때이를 탐지 할 수 있기를 원합니다 (클라이언트와 공유 할 세부 정보가 너무 많아 Laravel 만 기록해야하므로).Laravel 5.5 - 500 로그 오류 만, API를 통해 오류 세부 정보를 보내지 않습니까?

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

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

이 클라이언트가 보는 것입니다

: 우리는 오류 메시지와 같은 반환 할 수 있습니다 방법 enter image description here

을 대신 '오류가 발생했습니다' 정의되지 않은 메소드 App \ User :: firsgt() '에 대한 클라이언트의 너무 많은 세부 정보

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

답변

1

.env 파일의 변수를 변경하여 이러한 메시지가 응답과 함께 보내지지 않도록하십시오.

APP_ENV = 생산

APP_DEBUG=false 

편집 : 단지 false로 APP_DEBUG 설정은 충분하다.

업데이트 :가 당신이 다음 false로 APP_DEBUG 설정 옆에, 딩고 API 패키지를 사용하는 경우 사용자가 설정 파일을 편집해야합니다.

아직 아직 수행하지 않은 경우, 딩고 설정 파일

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

그런 다음, 공개 설정/API를 게시 할 수 있습니다.php를 입력하고 errorFormat 값을 원하는 메시지로 편집하십시오.

당신이 reasons- 때문에 보안를 위해 본을 보여주고 싶지 않아 생산을위한 오류의 자세한 설명은을 develpment 환경에 표시됩니다

+0

표준 laravel에서 제대로 작동하지만 dingo api를 사용하는 데 문제가 있습니다. 올바른 것으로 표시 되었기 때문에 laravel 솔루션 (다른 특정 문제는 해결할 수 있다고 생각함)을 위해 다른 사람과 나 자신에게 도움이되지만 딩고 API와 함께 사용할 때는 작동하지 않습니다. 같은 질문에 대한 딩고 API 버전에 대한 질문이 열립니다. – Wonka

+0

업데이트 딩고 API를 확인하십시오. – Hamoud

1

당신 '오류가 발생했습니다' 이 작업을 수행하려면 app/Exception/Handler.php 클래스가 있어야합니다. 예를 들어이 유사한 코드 사용할 수 있습니다

public function render($request, Exception $e) 
{ 
    $exception_class = get_class($e); 

    if (!in_array($exception_class, [ValidationException::class, ModelNotFoundException::class]) { 
     return response()->json(['info' => 'Error occurred'], 500); 
    } 

    return parent::render(); 
} 

을하지만, 당신이 보는대로 정상적인 방법으로 렌더링하고 싶은 몇 가지 예외 클래스를 제외한다, 여기에 일부 샘플 예외 클래스입니다.

을 사용하는 것이 분명하고 아마도 맞춤 예외 클래스를 처리 한 다음 다른 예외에 대해 500 개의 응답을 반환해야 할 수도 있습니다.

+0

감사합니다. laravel을 찾았습니다. 'APP_DEBUG = false'를 사용하는 것이 훨씬 쉽기 때문에 클라이언트는 오류를 안전하게/일반적으로'오류가 발생했습니다 '처리합니다. 내가 겪었던 문제는 딩고 api와 유사하지만, 동일한 질문을하지만 dingo api를 열었습니다. – Wonka

1

당신은 사용할 수 있습니다 try ... catch

try{ 
    ..... 
}catch(\Exception $e){ 
    if($e->getCode() == 500){ 
     return response()->json(["error"=>'$e->getCode()'],500); 
    } 
} 
+0

사실,하지만 모든 컨트롤러 메서드에 대해 내 코드에서 try catch를 명시 적으로 사용하고 싶지 않았습니다. 500 개의 laravel을 처리 할 수있는 단순한 글로벌 방식으로 버블 링 오류를 캡처합니다. – Wonka

1

Laravel 이미하지만, 당신을 위해이 작업을 수행 프로덕션 모드에 있고 요청이 JSON을 기대하는 경우에만 가능합니다.

어쨌든 App \ Exceptions \ Handler 클래스는 모든 예외를 처리 할 수있는 클래스입니다. 또한 모든 예외가 기록되고 Laravel 자체에서 렌더링되는 곳이기도합니다.

public function render($request, Exception $exception) 
{ 
    // your logic here 

    return parent::render($request, $exception); 
} 
1

일반적인 메시지와 함께 :message 교체, @Hamoud가 언급 한 바와 같이,

APP_DEBUG=true 

변화 그것에 :

APP_DEBUG=false 
라인을 찾을 수 귀하의 .ENV 파일로 이동

표준 오류 응답 만 표시합니다. error details에 대한 설명서를 확인하십시오.