<?php
namespace App\EventListener;
use App\Utils\Payload\Payload;
use Aura\Payload_Interface\PayloadStatus;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
use Symfony\Component\Security\Csrf\TokenStorage\TokenStorageInterface;
class ExceptionListener
{
public function __invoke(ExceptionEvent $event)
{
$exception = $event->getThrowable();
$payload = new Payload();
$payload->setStatus(PayloadStatus::ERROR);
$payload->setMessages([
$exception->getMessage(),
]);
$payload->setExtras([
'path' => $exception->getFile(),
'line' => $exception->getLine(),
]);
$response = new JsonResponse();
if ($exception instanceof HttpExceptionInterface) {
$response->setStatusCode($exception->getStatusCode());
$response->headers->replace($exception->getHeaders());
} else {
$response->setStatusCode(Response::HTTP_INTERNAL_SERVER_ERROR);
}
if (403 === $response->getStatusCode()) {
$payload->setStatus(PayloadStatus::NOT_AUTHORIZED);
$payload->setMessages(['Yetkisiz işlem.']);
}
$response->setData($payload->toArray());
$event->setResponse($response);
}
}