PHP
laravel5.4

Laravel エラー時のレスポンス形式の変更(JSON)

概要

ajax, api のルーティングのグループを作成したが、通常の処理は、JSON形式で返るが、
エラー発生時(400, 404, 500, 503など)の際にHTMLが返ってしまう。

エラーの時にもJSON形式で応答して欲しいので、調べた結果をメモに残す。

例外処理のrenderメソッドで対応する

下記のように特定のURL(ajax,api)などへのリクエストに対してまとめて変更する。

app/Exceptions/handler.php
// レスポンスをJSON形式に変更
if ($request->is('ajax/*') || $request->is('api/*') || $request->ajax()) {
    $status = 400;
    if ($this->isHttpException($exception)) {
        $status = $exception->getStatusCode();
    }
    return response()->json([
        'status' => $status,
        'errors' => $this->getMessage($status)
    ], $status);
}

以上

参考サイト