src/Kernel.php line 22

Open in your IDE?
  1. <?php
  2. namespace App;
  3. use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
  4. use Symfony\Component\HttpFoundation\JsonResponse;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
  8. use Symfony\Component\HttpKernel\Kernel as BaseKernel;
  9. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  10. use Symfony\Component\Security\Core\Exception\AuthenticationException;
  11. use Throwable;
  12. class Kernel extends BaseKernel
  13. {
  14.     use MicroKernelTrait;
  15.     public function handle(Request $requestint $type self::MAIN_REQUESTbool $catch true): Response
  16.     {
  17.         try {
  18.             return parent::handle($request$typefalse);
  19.         } catch (Throwable $exception) {
  20.             $statusCode = match (true) {
  21.                 $exception instanceof HttpExceptionInterface => $exception->getStatusCode(),
  22.                 $exception instanceof AccessDeniedException => Response::HTTP_FORBIDDEN,
  23.                 $exception instanceof AuthenticationException => Response::HTTP_UNAUTHORIZED,
  24.                 method_exists($exception'getStatusCode') => $exception->getStatusCode(),
  25.                 default => Response::HTTP_INTERNAL_SERVER_ERROR,
  26.             };
  27.             $exposeMessage $this->getEnvironment() === 'dev';
  28.             $response = [
  29.                 'message' => $exposeMessage
  30.                     $exception->getMessage()
  31.                     : 'An error occurred',
  32.                 'code' => $statusCode
  33.             ];
  34.             if ($exposeMessage) {
  35.                 $response['error']['file'] = $exception->getFile();
  36.                 $response['error']['line'] = $exception->getLine();
  37.                 $response['error']['trace'] = $exception->getTraceAsString();
  38.             }
  39.             return new JsonResponse($response$statusCode);
  40.         }
  41.     }
  42. }