isExceptionType($e, NotifyException::class)) { session()->flash('error', $this->getOriginalMessage($e)); return redirect($e->redirectLocation); } // Handle pretty exceptions which will show a friendly application-fitting page // Which will include the basic message to point the user roughly to the cause. if ($this->isExceptionType($e, PrettyException::class) && !config('app.debug')) { $message = $this->getOriginalMessage($e); $code = ($e->getCode() === 0) ? 500 : $e->getCode(); return response()->view('errors/' . $code, ['message' => $message], $code); } // Handle 404 errors with a loaded session to enable showing user-specific information if ($this->isExceptionType($e, NotFoundHttpException::class)) { return $this->loadErrorMiddleware($request, function ($request) use ($e) { $message = $e->getMessage() ?: trans('errors.404_page_not_found'); return response()->view('errors/404', ['message' => $message], 404); }); } return parent::render($request, $e); } /** * Load the middleware required to show state/session-enabled error pages. * @param Request $request * @param $callback * @return mixed */ protected function loadErrorMiddleware(Request $request, $callback) { $middleware = (\Route::getMiddlewareGroups()['web_errors']); return (new Pipeline($this->container)) ->send($request) ->through($middleware) ->then($callback); } /** * Check the exception chain to compare against the original exception type. * @param Exception $e * @param $type * @return bool */ protected function isExceptionType(Exception $e, $type) { do { if (is_a($e, $type)) { return true; } } while ($e = $e->getPrevious()); return false; } /** * Get original exception message. * @param Exception $e * @return string */ protected function getOriginalMessage(Exception $e) { do { $message = $e->getMessage(); } while ($e = $e->getPrevious()); return $message; } /** * 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) { if ($request->expectsJson()) { return response()->json(['error' => 'Unauthenticated.'], 401); } return redirect()->guest('login'); } /** * Convert a validation exception into a JSON response. * * @param \Illuminate\Http\Request $request * @param \Illuminate\Validation\ValidationException $exception * @return \Illuminate\Http\JsonResponse */ protected function invalidJson($request, ValidationException $exception) { return response()->json($exception->errors(), $exception->status); } }