laravel8のAPIのエラー処理を書いてJSONで返す
何もしないと、普通にエラー画面のHTMLが出力されるので、APIの時はエラー処理を行う。
laravelのエラー処理は、app/Exceptions/Handler.phpに集約されているので、以下の追記だけで大丈夫
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public function render($request, $exception) { // APIの場合はエラー画面ではなく、JSONでエラーコードとメッセージを返す if ( $request->is('api/*') ) { if($this->isHttpException($exception)){ return response()->json([ 'error_code' => $exception->getStatusCode(), 'errors' => $exception->getMessage() ], $exception->getStatusCode()); } // HTTPエラーじゃないけど、laravel的エラー。400(Bad Request)を返す return response()->json([ 'error_code' => 400, 'errors' => $exception->getMessage() ], 400); } return parent::render($request, $exception); } |
エラー時には、こんな感じでJSONレスポンスが返ってくる。右から左に流す感じ
1 2 3 4 |
{ "error_code": 405, "errors": "The POST method is not supported for this route. Supported methods: GET, HEAD, PUT, PATCH, DELETE." } |