<?php
namespace App\Component\EventListener;
use App\Component\Traits\ParameterBagTrait;
use App\Controller\Api\AbstractApiController;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use function Symfony\Component\String\s;
class ExceptionListener extends AbstractApiController
{
use ParameterBagTrait;
/**
* Fonction qui s'execute lorsqu'il y a une exception levée au niveau kernel.
* @param ExceptionEvent $event
* @noinspection PhpUnused
*/
public function onKernelException(ExceptionEvent $event)
{
$userAgent = $event->getRequest()->headers->get('User-Agent');
// réponse en mode JSON si l'user agent contient "postman" ou bien "okhttp"
if (!s(strtolower($userAgent))->containsAny(['postman', 'okhttp'])) {
return;
}
$message = null;
if ($this->parameterBag->get('api.debug')) {
$exception = $event->getThrowable();
$message = [
'error' => $exception->getMessage(),
'trace' => explode("\n", $exception->getTraceAsString()),
];
}
$event->setResponse($this->apiErrorResponse($message));
}
}