<?php
namespace App\Listener;
use Aws\S3\Exception\S3Exception;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\Mime\Exception\InvalidArgumentException;
class ExceptionToJsonListener
{
public function onKernelException(ExceptionEvent $event)
{
$exception = $event->getThrowable();
if ($exception instanceof HttpException) {
$response = new JsonResponse();
$response->setStatusCode($exception->getStatusCode());
$response->setData([
'code' => $exception->getCode(),
'status' => $exception->getStatusCode(),
'title' => $exception->getMessage(),
]);
$response->headers->replace($exception->getHeaders());
$event->setResponse($response);
}
if ($exception instanceof InvalidArgumentException) {
$code = 0 == $exception->getCode() ? 500 : $exception->getCode();
$response = new JsonResponse([
'code' => $code,
'title' => $exception->getMessage(),
], $code);
$event->setResponse($response);
}
if ($exception instanceof S3Exception) {
$code = Response::HTTP_SERVICE_UNAVAILABLE;
$response = new JsonResponse([
'code' => $code,
'title' => $exception->getMessage(),
], $code);
$event->setResponse($response);
}
}
}