| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 | 
							- <?php
 - 
 - namespace App\Exceptions;
 - 
 - use Throwable;
 - use Illuminate\Http\Response;
 - use Illuminate\Support\Facades\Log;
 - use Illuminate\Database\QueryException;
 - use Illuminate\Auth\AuthenticationException;
 - use Illuminate\Validation\ValidationException;
 - use Illuminate\Database\Eloquent\ModelNotFoundException;
 - use Symfony\Component\HttpKernel\Exception\HttpException;
 - use Symfony\Component\Routing\Exception\RouteNotFoundException;
 - use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
 - use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 - use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
 - 
 - class Handler extends ExceptionHandler
 - {
 -     /**
 -      * A list of the exception types that are not reported.
 -      *
 -      * @var array<int, class-string<Throwable>>
 -      */
 -     protected $dontReport = [
 -         //
 -     ];
 - 
 -     /**
 -      * A list of the inputs that are never flashed for validation exceptions.
 -      *
 -      * @var array<int, string>
 -      */
 -     protected $dontFlash = [
 -         'current_password',
 -         'password',
 -         'password_confirmation',
 -     ];
 - 
 -     /**
 -      * Register the exception handling callbacks for the application.
 -      *
 -      * @return void
 -      */
 -     public function register()
 -     {
 -         $this->reportable(function (Throwable $e) {
 -             //
 -         });
 - 
 -         $this->renderable(function (Throwable $e, $request) {
 -             if ($request->is('api/*')) {
 -                 return $this->handleApiException($e);
 -             }
 -         });
 -     }
 - 
 -     public function handleApiException(Throwable $exception)
 -     { 
 -         dd($exception);
 -         // Route Not Found 404
 -         if ($exception instanceof RouteNotFoundException) {
 -             return $this->apiExceptionResponse($exception, Response::HTTP_NOT_FOUND, config('response-message.router_failed'));
 -         }
 - 
 -         // Not Found 404
 -         if ($exception instanceof NotFoundHttpException) {
 -             $message = $exception->getMessage() ?: config('response-message.not_found');
 -             return $this->apiExceptionResponse($exception, Response::HTTP_NOT_FOUND, $message);
 -         }
 - 
 -         // Model Not Found 500
 -         if ($exception instanceof ModelNotFoundException) {
 -             $exception = new NotFoundHttpException($exception->getMessage(), $exception);
 -         }
 - 
 -         // Authentication 401
 -         if ($exception instanceof AuthenticationException) {
 -             return $this->apiExceptionResponse($exception, Response::HTTP_UNAUTHORIZED, config('response-message.authenticate_failed'));
 -         }
 - 
 -         // Unauthorized
 -         if ($exception instanceof UnauthorizedHttpException) {
 -             return $this->apiExceptionResponse($exception, $exception->getStatusCode(), config('response-message.authorize_failed'));
 -         }
 - 
 -         // Http
 -         if ($exception instanceof HttpException) {
 -             return $this->apiExceptionResponse($exception, $exception->getStatusCode(), $exception->getMessage());
 -         }
 - 
 -         // Query 500
 -         if ($exception instanceof QueryException) {
 -             $this->apiExceptionResponse($exception, Response::HTTP_INTERNAL_SERVER_ERROR, config('response-message.sql_error'));
 -         }
 - 
 -         // Validation 422
 -         if ($exception instanceof ValidationException) {
 - 
 -             $validationData = [];
 -             foreach ($exception->errors() as $col => $errorMsg) {
 -                 $validationData['errors']['validation'][$col] = $errorMsg[0];
 -             }
 -             return $this->apiExceptionResponse($exception, Response::HTTP_UNPROCESSABLE_ENTITY, config('response-message.validation_failed'), $validationData);
 -         }
 - 
 -         // Others: 500 error
 -         return $this->apiExceptionResponse($exception, Response::HTTP_INTERNAL_SERVER_ERROR, 'server error');
 -     }
 - 
 -     public function apiExceptionResponse(Throwable $exception, int $code, string $message, array $mergeData = [])
 -     {
 -         if ($code === Response::HTTP_INTERNAL_SERVER_ERROR) {
 -             Log::info($exception->getMessage());
 -         }
 - 
 -         $data = [
 -             'code'    => $code,
 -             'message' => $message,
 -         ];
 - 
 -         if (!app()->environment('production')) {
 -             $data['errors'] = [
 -                 'message' => $exception->getMessage(),
 -                 'trace'   => $exception->getTrace(),
 -             ];
 -         }
 - 
 -         if (!empty($mergeData)) {
 -             $data = array_merge($data, $mergeData);
 -         }
 - 
 -         return response()->json($data, $code);
 -     }
 - }
 
 
  |