> */ protected $dontReport = [ // ]; /** * A list of the inputs that are never flashed for validation exceptions. * * @var array */ 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) { // }); } /** * Report or log an exception. * * @param Throwable $e * @return void * @throws Throwable */ /* public function report(Throwable $e) { if (app()->bound('sentry') && $this->shouldReport($e)) { app('sentry')->captureException($e); } parent::report($e); } */ /** * Render an exception into an HTTP response. * * @param Request $request * @param Throwable $exception * @return RedirectResponse|Response * @throws Throwable */ public function render($request, Throwable $exception) { DB::rollBack(); // Page Header $page = [ 'code' => 'error', 'title' => '', 'subTitle' => '', 'description' => '', 'link' => '/', 'is_main' => true ]; $pages = config('pages'); if ($request->ajax() || $request->wantsJson() || $request->expectsJson()) { $response = $this->errorJson($exception); if ($response !== false) { return $response; } } $errorCode = 500; if (method_exists($exception, 'getStatusCode')) { $errorCode = $exception->getStatusCode(); } $data = [ 'breadcrumbs'=>[], 'pageheader'=>[ 'code' => 'exception', 'title' => 'Exception', 'icon' => 'fa-exclamation-triangle', 'description' => '', 'link' => '' ], 'errorCode' => $errorCode, 'exception' => $exception, 'now' => (string)Carbon::now(), 'page' => $page, 'pages' => $pages, 'settings' => $this->setSettings() ]; if ($exception instanceof UnauthorizedHttpException || $exception instanceof AuthenticationException || $exception instanceof AuthorizationException || $exception instanceof VerifyCsrfToken || $exception instanceof TokenMismatchException) { return redirect()->route('cms.login'); } return response()->view('errors', $data, $errorCode); } /** * Render an exception into an HTTP response. * * @param Throwable $exception * @return bool|JsonResponse * @throws Throwable */ private function errorJson(Throwable $exception) { $errorCode = 500; if (method_exists($exception, 'getStatusCode')) { $errorCode = $exception->getStatusCode(); } if ($errorCode == 503) { $messageText = "서버 점검중입니다."; $result = [ "status" => $errorCode, "message" => $messageText, "success" => false, "data" => null, "errors" => [ "message" => [ $messageText ] ] ]; $headers = []; return response()->json($result, $errorCode, $headers, JSON_UNESCAPED_UNICODE); } if ($exception instanceof UnauthorizedHttpException || $exception instanceof AuthenticationException || $exception instanceof AuthorizationException) { $errorCode = 401; $result = [ "status" => $errorCode, "message" => "인증정보가 없습니다.", "success" => false, "data" => null, "errors" => [ "message" => [ $exception->getMessage() ] ] ]; logger($result); $headers = []; return response()->json($result, $errorCode, $headers, JSON_UNESCAPED_UNICODE); } else if ($exception instanceof ValidationException ) { $result = [ "status" => $errorCode, "message" => "유효성 검사가 실패했습니다.", "success" => false, "data" => null, "errors" => $exception->validator->messages()->messages() ]; logger($result); $headers = []; return response()->json($result, $errorCode, $headers, JSON_UNESCAPED_UNICODE); } else if ($exception instanceof AccessDeniedHttpException) { $result = [ "status" => $errorCode, "message" => "접근권한이 없습니다.", "success" => false, "data" => null, "errors" => [ "message" => [ 'AccessDenied' ] ] ]; logger($result); $headers = []; return response()->json($result, $errorCode, $headers, JSON_UNESCAPED_UNICODE); } else if ($exception instanceof TokenMismatchException) { $errorCode = 419; $result = [ "status" => $errorCode, "message" => "인증토근이 일치하지 않습니다.", "success" => false, "data" => null, "errors" => [ "message" => [ 'CSRF Token Mismatch' ] ] ]; logger($result); $headers = []; return response()->json($result, $errorCode, $headers, JSON_UNESCAPED_UNICODE); } else if ($exception instanceof Exception) { $message = $exception->getMessage(); if (!$message) { $message = sprintf("[%d] 서버 에러", $errorCode); } $result = [ "status" => $errorCode, "message" => "서버 에러", "success" => false, "data" => null, "errors" => ["message" => [$message]] ]; logger($result); if(!$exception->getMessage() || $errorCode != 404) { logger($exception->getFile(). " : " . $exception->getLine()); logger($exception->getTraceAsString()); } $headers = []; return response()->json($result, $errorCode, $headers, JSON_UNESCAPED_UNICODE); } return false; } private function setSettings() { // 전역변수 설정 $_settings = Setting::all(); $settings = []; if ($_settings) { foreach ($_settings as $row) { $settings[$row['key']] = $row['value']; } } //logger($settings); return (object)$settings; } }