url)); } try { if (!config('app.debug')) { if ($this->shouldntReport($e)) { return; } Mail::send(new ExceptionAlert($e)); } } finally { parent::report($e); } } /** * Render an exception into an HTTP response. * * @param \Illuminate\Http\Request $request * @param \Throwable $e * @return \Symfony\Component\HttpFoundation\Response * * @throws \Throwable */ public function render($request, Throwable $e) { if (Helper::isRequestForApiV2($request) and $request->isJson()) { switch (get_class($e)) { case AuthenticationException::class: /** @var AuthenticationException $e */ return response()->json([ 'message' => sprintf('%s, %s', ApiError::needAuth()->label, $e->getMessage()), 'code' => ApiError::needAuth()->value, ], 407); case MethodNotAllowedHttpException::class: /** @var MethodNotAllowedHttpException $e */ return response()->json([ 'message' => sprintf('%s, %s', ApiError::methodNotAllowed()->label, $e->getMessage()), 'code' => ApiError::methodNotAllowed()->value, ], $e->getStatusCode()); case ValidationException::class: /** @var ValidationException $e */ return response()->json([ 'message' => sprintf('%s, %s', ApiError::validationFailed()->label, $e->getMessage()), 'code' => ApiError::validationFailed()->value, 'errors' => $e->errors() ], $e->status); case ModelNotFoundException::class: /** @var ModelNotFoundException $e */ return response()->json([ 'message' => sprintf( ApiError::modelNotFound()->label, \array_slice(explode('\\', $e->getModel()), -1)[0] ), 'code' => ApiError::modelNotFound()->value ], 404); case ApiErrorException::class: /** @var ApiErrorException $e */ return response()->json([ 'message' => $e->getMessage(), 'code' => $e->getCode() ], $e->getStatusCode()); case ThrottleRequestsException::class: /** @var ThrottleRequestsException $e */ return response()->json([ 'message' => ApiError::throttleRequestsException()->label, 'code' => ApiError::throttleRequestsException()->value ], 429); case CrmException::class: default: return response()->json([ 'message' => $e->getMessage(), 'code' => $e->getCode() ], 500); } } return parent::render($request, $e); } }