<?php
/**
* Exception Listener custom render json-ld
*
* @package RMCS
* @author Vlad Shashkov <vlad.s@zimalab.com>
* @copyright 2014 - 2019 The Zimalab
*/
declare(strict_types=1);
namespace App\EventListener;
use ApiPlatform\Core\Bridge\Symfony\Validator\Exception\ValidationException;
use Symfony\Component\HttpFoundation\{JsonResponse, Response};
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
class ExceptionListener
{
/**
* Event exception errors
*
* @param ExceptionEvent $event
*/
public function onKernelException(ExceptionEvent $event): void
{
$exception = $event->getException();
if (!$exception instanceof ValidationException) {
$request = $event->getRequest();
$response = [
'@id' => $request->getHost(),
'@type' => 'error',
'@context' => [
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
],
];
if ($_ENV['APP_ENV'] == 'dev') {
$response['@context']['trace'] = $exception->getTrace();
}
if ($exception->getMessage() == 'Syntax error') {
$event->setResponse(new JsonResponse(
$response,
Response::HTTP_BAD_REQUEST
));
} else {
$event->setResponse(new JsonResponse(
$response
));
}
}
}
}