<?php
namespace App\EventListener;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
class ExceptionListener
{
private $parameterBag;
public function __construct (ParameterBagInterface $parameterBag)
{
$this->parameterBag = $parameterBag;
}
public function onKernelException(ExceptionEvent $event)
{
$exception = $event->getException();
$statusCode = $exception->getCode();
$request = $event->getRequest();
$match=[];
preg_match('/application\/w*json/',$request->headers->get("content-type"),$match);
if ($this->parameterBag->has("JSON_EXCEPTION")
&& $this->parameterBag->get("JSON_EXCEPTION")
&& count($match)>0 ) {
$isMessageJsonFormat = $this->isJSON($exception->getMessage());
$data =$isMessageJsonFormat ? json_decode($exception->getMessage()) : null;
$message = !$isMessageJsonFormat ? $exception->getMessage() : null;
$event->setResponse(new JsonResponse(["message"=>$message, "data"=>$data,"status"=>$statusCode], $statusCode));
}
}
/**
* Determinamos si el mensaje entrate tiene formato JSON
* @param $string
* @return bool
*/
private function isJSON($string){
return is_string($string) && is_array(json_decode($string, true));
}
}