LaravelでAPI接続時にエラーの場合の出力をまとめ。
Laravel6で確認。
API時のエラー処理を追加
\app\Exceptions\Handler.phpのファイルを編集してrenderのメソッドを編集します。
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Illuminate\Validation\ValidationException;
use Illuminate\Support\Facades\Log;
class Handler extends ExceptionHandler
{
# ~~~~~~~~~~~~~~~
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $exception
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $exception)
{
// API判定
if ($request->is('ajax/*') || $request->is('api/*') || $request->ajax()) {
// Exceptionの種類によって分ける
if($exception instanceof ValidationException){
$response = [
'data' => $this,
'status' => 'NG',
'summary' => 'Failed validation.',
'errors' => $exception->errors(),
];
return response()->json( $response, 422 );
}
$response = [
'data' => [],
'status' => 'NG',
'summary' => 'Server Error',
'errors' => ['error' => 'Server Error'],
];
$is_debug = config('app.debug');
if($is_debug){
// デバック時は詳細なエラーメッセージ
$response['errors'] =['error' => $exception->getMessage()];
}
// ログ出力
Log::error($exception->getMessage());
return response()->json($response, 500);
}
Log::error($exception->getMessage());
return parent::render($request, $exception);
}
}
Laravel Model バリデーション実装 と組み合わせて使用することが可能です。

0 件のコメント :
コメントを投稿