log = $log; } /** * Report or log an exception. * * @param \Exception $e * @return void */ public function report(Exception $e) { if ($this->shouldReport($e)) { $this->log->error($e); } } /** * Determine if the exception should be reported. * * @param \Exception $e * @return bool */ public function shouldReport(Exception $e) { return ! $this->shouldntReport($e); } /** * Determine if the exception is in the "do not report" list. * * @param \Exception $e * @return bool */ protected function shouldntReport(Exception $e) { foreach ($this->dontReport as $type) { if ($e instanceof $type) { return true; } } return false; } /** * Render an exception into a response. * * @param \Illuminate\Http\Request $request * @param \Exception $e * @return \Illuminate\Http\Response */ public function render($request, Exception $e) { if ($this->isUnauthorizedException($e)) { $e = new HttpException(403, $e->getMessage()); } if ($this->isHttpException($e)) { return $this->toIlluminateResponse($this->renderHttpException($e), $e); } else { return $this->toIlluminateResponse($this->convertExceptionToResponse($e), $e); } } /** * Map exception into an illuminate response. * * @param \Symfony\Component\HttpFoundation\Response $response * @param \Exception $e * @return \Illuminate\Http\Response */ protected function toIlluminateResponse($response, Exception $e) { $response = new Response($response->getContent(), $response->getStatusCode(), $response->headers->all()); $response->exception = $e; return $response; } /** * Render an exception to the console. * * @param \Symfony\Component\Console\Output\OutputInterface $output * @param \Exception $e * @return void */ public function renderForConsole($output, Exception $e) { (new ConsoleApplication)->renderException($e, $output); } /** * Render the given HttpException. * * @param \Symfony\Component\HttpKernel\Exception\HttpException $e * @return \Symfony\Component\HttpFoundation\Response */ protected function renderHttpException(HttpException $e) { $status = $e->getStatusCode(); if (view()->exists("errors.{$status}")) { return response()->view("errors.{$status}", ['exception' => $e], $status); } else { return $this->convertExceptionToResponse($e); } } /** * Convert the given exception into a Response instance. * * @param \Exception $e * @return \Symfony\Component\HttpFoundation\Response */ protected function convertExceptionToResponse(Exception $e) { return (new SymfonyDisplayer(config('app.debug')))->createResponse($e); } /** * Determine if the given exception is an access unauthorized exception. * * @param \Exception $e * @return bool */ protected function isUnauthorizedException(Exception $e) { return $e instanceof UnauthorizedException; } /** * Determine if the given exception is an HTTP exception. * * @param \Exception $e * @return bool */ protected function isHttpException(Exception $e) { return $e instanceof HttpException; } }