src/Subscriber/ExceptionSubscriber.php line 41

Open in your IDE?
  1. <?php
  2. /**
  3.  * User: Mykola Zots
  4.  * Date: 2025-09-12
  5.  * Time: 08:42
  6.  */
  7. namespace App\Subscriber;
  8. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\HttpKernel\KernelEvents;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. use Symfony\Component\HttpFoundation\RedirectResponse;
  13. use Symfony\Component\HttpFoundation\RequestStack;
  14. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  15. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  16. use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
  17. use Symfony\Contracts\Translation\TranslatorInterface;
  18. class ExceptionSubscriber implements EventSubscriberInterface
  19. {
  20.     private $requestStack;
  21.     private $urlGenerator;
  22.     private $flashBag;
  23.     private $translator;
  24.     public function __construct(RequestStack $requestStackUrlGeneratorInterface $urlGenerator,TranslatorInterface $translatorFlashBagInterface $flashBag) {
  25.         $this->urlGenerator=$urlGenerator;
  26.         $this->requestStack=$requestStack;
  27.         $this->flashBag=$flashBag;
  28.         $this->translator=$translator;
  29.     }
  30.     public static function getSubscribedEvents(): array
  31.     {
  32.         return [
  33.             KernelEvents::EXCEPTION => 'onKernelException',
  34.         ];
  35.     }
  36.     public function onKernelException(ExceptionEvent $event): void
  37.     {
  38.         $exception $event->getThrowable();
  39.         $request $event->getRequest();
  40.         if ($exception instanceof \Symfony\Component\HttpKernel\Exception\BadRequestHttpException) {
  41.             
  42.             // Обмежимося адмінськими роутами (налаштуйте під себе)
  43.             $isAdmin str_starts_with((string) $request->attributes->get('_route'''), 'dashboard');
  44.             if ($isAdmin) {
  45.                 $this->flashBag->add('danger'$this->translator->trans($exception->getMessage()));
  46.                 
  47.                 $backUrl $request->headers->get('referer') ?$request->headers->get('referer'): $this->urlGenerator->generate('admin'); 
  48.                 $event->setResponse(new RedirectResponse($backUrl));
  49.             }else{
  50.                 $response = new JsonResponse([
  51.                     $exception->getMessage()
  52.                 ], 400);
  53.                 $event->setResponse($response);
  54.             }/* else {
  55.                 $session = $this->requestStack->getSession();
  56.                 if ($session) {
  57.                     $session->getFlashBag()->add('danger', $exception->getMessage());
  58.                 }
  59.  
  60.                 $backUrl = $request->headers->get('referer') ?$request->headers->get('referer'): $this->urlGenerator->generate('admin'); 
  61.                 $event->setResponse(new RedirectResponse($backUrl));
  62.             
  63.             }*/
  64.         }
  65.     }
  66. }