2017-11-16 7 views
0

私はlaravelのdingo apiで500エラーを処理する問題を示すために以下のコントローラを作った。 500エラーがスローされてクライアントに送信されないようにすることができるようにしたい(クライアントと共有するには詳細があまりなく、Laravelのみでログに記録する必要があるため)。Laravel Dingo API - ログ500のみのエラーです.API経由でエラーの詳細を送信しませんか?

これは、クライアントが見ているものであるため、タイプミスに意図的にfirsgt()

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

を500エラーを返しgetUser()方法:私のコントローラで 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

を「エラーが発生しました」あなたのディンゴ設定をチェックし、これら2つのパラメータをfalseに設定する必要があります。

APP_DEBUG=false 
API_DEBUG=false 

まだ問題が発生している場合は、コメントに示唆されているとおり、本番環境にあることを確認してください。

最後に、まだ問題が残っている場合(通常はこれらのフィールドをfalseに設定した後は存在しないはずです)、this issue(2015年以降の日付)をチェックすることができます。

コメントの1から修正が(そのまま)言う:

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

あなたはまだ、まだ行っていない場合は、ディンゴの設定ファイルを公開

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

その後、config/api.php開き、好きなメッセージにerrorFormat値を編集します。あなたのENVが生産に設定されている場合、一般的なメッセージ

+0

本当にこれがうまくいきたかったのですが、 'エラーが発生しました 'というメッセージを記入すると、このようなコントローラでカスタムエラー処理で設定した 'message'を上書きします。' return $ this-> response-> array(['error' => true、 'message' => '重複したエントリです。')) - > setStatusCode(300); ''エラーが発生しました 'を ':message'としてハードコードすると、重複エントリエラーは表示されません。重複したエントリエラーは、クライアントのために変換したい 'Error Occurred'と' Error Occurred'上書きエラーを上書きするべきではありませんか? – Wonka

関連する問題