[laravel]ApiのエラーをhtmlからJSONにする
初期でのエラーの戻りですが、明確に記載が無い場所はhtmlでエラーが出力されてしまいます。
基本的なシステムのエラーをJSONにする修正は
「app\Exception\Handler.php」
をいじる事となります。まあ基本は公式を参考にする事とします。
https://readouble.com/laravel/9.x/ja/errors.html
認証エラー
認証エラーは、既にあるhandlerをオーバーライドします。
use Illuminate\Auth\AuthenticationException;
/**
* Convert an authentication exception into an unauthenticated response.
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Auth\AuthenticationException $exception
* @return \Illuminate\Http\Response
*/
protected function unauthenticated($request, AuthenticationException $exception)
{
// 認証エラーの場合
return response()->json(['error' => 'Unauthenticated.'], Response::HTTP_UNAUTHORIZED);
}
404エラー等の各エラーハンドリング
/**
* Register the exception handling callbacks for the application.
*
* @return void
*/
public function register()
{
// 404の場合のエラー表示処理
$this->renderable(function (NotFoundHttpException $e, $request) {
if ($request->is('api/*')) {
return response()->json([
'message' => 'not found record'
], Response::HTTP_NOT_FOUND);
}
});
}
バリデーションによるエラー検出
バリデーションの個所はApiResponceを作り継承する形にする。
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Response;
abstract class ApiRequest extends FormRequest
{
/**
* Handle a failed validation attempt.
*
* @param Validator $validator
* @return void
*
* @throws HttpResponseException
*/
protected function failedValidation(Validator $validator)
{
$data = [
'message' => __('The given data was invalid.'),
'errors' => $validator->errors()->toArray(),
];
throw new HttpResponseException(response()->json($data, Response::HTTP_UNPROCESSABLE_ENTITY));
}
}