src/EventListener/ClientErrorListener.php line 16

Open in your IDE?
  1. <?php namespace App\EventListener;
  2. use Psr\Log\LoggerInterface;
  3. use Symfony\Component\HttpFoundation\JsonResponse;
  4. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  5. class ClientErrorListener
  6. {
  7.     
  8.     protected $logger;
  9.     
  10.     public function __construct(LoggerInterface $logger) {
  11.         $this->logger $logger;
  12.     }
  13.     
  14.     public function onKernelException(ExceptionEvent $event)
  15.     {
  16.         // You get the exception object from the received event
  17.         $exception $event->getThrowable();
  18.         $message $exception->getMessage();
  19.         $response null;
  20.         if ($exception instanceof \AdScore\Common\Gearboy\RoutineError) {
  21.             /* Common case: Routine returned a logic error */
  22.             $response = new JsonResponse([
  23.                 'status' => 'error'
  24.                 'errors' => [
  25.                     array_filter(['fields' => $exception->getFields(), 'message' => $exception->getMessage(), 'code' => $exception->getCode()])
  26.                 ]
  27.             ], JsonResponse::HTTP_BAD_REQUEST);        
  28.         } elseif ($exception instanceof \AdScore\Common\Exception\BreakpointException) { 
  29.             $response = new JsonResponse(['status' => 'breakpoint''file' => $exception->getFile(), 'line' => $exception->getLine(), 'dump' => $exception->getDump()], 451);
  30.         } elseif (($exception instanceof \App\Component\Report\Exception\ReportErrorInterface) || ($exception instanceof \App\Component\Report\Exception\ReportExceptionInterface)) {
  31.             /* Known errors caused by request data */
  32.             $response = new JsonResponse(['status' => 'error''errors' => [['message' => $message]]], 400);
  33.         } elseif ($exception instanceof \App\Component\HttpFoundation\PayloadValidationException) {
  34.             /* Known errors caused by request data */
  35.             $response = new JsonResponse(['status' => 'error''errors' => $exception->getErrors()], 400);
  36.          } elseif ($exception instanceof \AdScore\Traffic\Utils\RequestError) { 
  37.             /* Known errors caused by request data */
  38.             $response = new JsonResponse(['status' => 'error''errors' => [[
  39.                 'message' => $message
  40.                 'code' => 11000 + ($exception->getCode() % 100)
  41.             ]]], 400);    
  42.         } elseif ((stripos($event->getRequest()->getClientIp(), '172.16.') !== 0) && (($exception->getCode() >= 400) && ($exception->getCode() <= 600))) {
  43.             /* Various errors with assigned HTTP codes (with exception to privnet) */
  44.             $response = new JsonResponse(['status' => 'error''errors' => [['message' => $message]]], $exception->getCode());
  45.         } elseif ($exception instanceof \Symfony\Component\HttpKernel\Exception\HttpException) {
  46.             /* Errors directly marked as HTTP emittable */
  47.             if (empty($message) || (strlen($message) > 48))
  48.                 $message JsonResponse::$statusTexts[$exception->getStatusCode()];
  49.             $response = new JsonResponse(['status' => 'error''errors' => [['message' => $message]]], $exception->getStatusCode());
  50.         }
  51.         if (!empty($response)) 
  52.             $event->setResponse($response);
  53.     }
  54.     
  55. }