<?php
namespace App\Subscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Error\SyntaxError;
/**
* Personalisation du accès denied
*/
class AccessDeniedSubscribouz implements EventSubscriberInterface
{
/**
* @var Environment
*/
private $twig;
/**
* @param Environment $twig
*/
public function __construct(Environment $twig)
{
$this->twig = $twig;
}
/**
* @return array[]
*/
public static function getSubscribedEvents(): array
{
return [
KernelEvents::EXCEPTION => ['onKernelException', 2],
];
}
/**
* @param ExceptionEvent $event
*
* @return void
* @throws LoaderError
* @throws RuntimeError
* @throws SyntaxError
*/
public function onKernelException(ExceptionEvent $event): void
{
$exception = $event->getThrowable();
if (!$exception instanceof AccessDeniedException) {
return;
}
return;
$event->stopPropagation();
$content = $this->twig->render('security/access-denied.html.twig');
$response = new Response($content, 403);
$event->setResponse($response);
}
}