src/EventListener/ExceptionListener.php line 21

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  4. use Symfony\Component\HttpFoundation\JsonResponse;
  5. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  6. class ExceptionListener
  7. {
  8.     private $parameterBag;
  9.     public function __construct (ParameterBagInterface $parameterBag)
  10.     {
  11.         $this->parameterBag $parameterBag;
  12.     }
  13.     public function onKernelException(ExceptionEvent $event)
  14.     {
  15.         $exception $event->getException();
  16.         $statusCode $exception->getCode();
  17.         $request   $event->getRequest();
  18.         $match=[];
  19.         preg_match('/application\/w*json/',$request->headers->get("content-type"),$match);
  20.         if ($this->parameterBag->has("JSON_EXCEPTION")
  21.             && $this->parameterBag->get("JSON_EXCEPTION")
  22.             && count($match)>) {
  23.             $isMessageJsonFormat $this->isJSON($exception->getMessage());
  24.             $data =$isMessageJsonFormat json_decode($exception->getMessage()) : null;
  25.             $message = !$isMessageJsonFormat $exception->getMessage() : null;
  26.             $event->setResponse(new JsonResponse(["message"=>$message"data"=>$data,"status"=>$statusCode], $statusCode));
  27.         }
  28.     }
  29.     /**
  30.      * Determinamos si el mensaje entrate tiene formato JSON
  31.      * @param $string
  32.      * @return bool
  33.      */
  34.     private function isJSON($string){
  35.         return is_string($string) && is_array(json_decode($stringtrue));
  36.     }
  37. }