src/EventListener/ExceptionListener.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Service\MailService;
  4. use Symfony\Component\HttpFoundation\JsonResponse;
  5. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  6. use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\Routing\RouterInterface;
  9. use Symfony\Component\HttpFoundation\RedirectResponse;
  10. use Symfony\Component\HttpFoundation\RequestStack;
  11. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  12. use Symfony\Component\Security\Core\Security;
  13. class ExceptionListener
  14. {
  15.   private $flashBag;
  16.   private $router;
  17.   public function __construct(RouterInterface $routerSecurity $securityRequestStack $request_stackMailService $mail_service)
  18.   {
  19.     $this->flashBag $request_stack->getSession()->getFlashBag();
  20.     $this->router $router;
  21.     $this->security $security;
  22.     $this->mail_service $mail_service;
  23.   }
  24.   public function onKernelException(ExceptionEvent $event)
  25.   {
  26.     $this->flashBag->clear();
  27.     $exception $event->getThrowable();
  28.     $message sprintf(
  29.           'My Error says: %s with code: %s',
  30.           $exception->getMessage(),
  31.           $exception->getCode()
  32.     );
  33.     $content $message;
  34.     $response = new Response();
  35.     $response->setContent($message);
  36.     if ($exception instanceof HttpExceptionInterface) {
  37.       $response->setStatusCode($exception->getStatusCode());
  38.       $response->headers->replace($exception->getHeaders());
  39.     }else if($exception->getCode() == 403){
  40.       $response->setStatusCode($exception->getCode());
  41.     } else {
  42.              $response->setStatusCode(Response::HTTP_INTERNAL_SERVER_ERROR);
  43.     } 
  44.     $event->setResponse($response);
  45.     $this->flashBag->add(
  46.       'code',
  47.       $response->getStatusCode()
  48.     );    
  49.     if($event->getRequest()->isXmlHttpRequest()){
  50.       
  51.       $this->mail_service->send_single_email("nicolas.deboise@spontaneit.fr""ERREUR - Webqualite ".$event->getResponse()->getStatusCode(), $content);
  52.       switch($event->getResponse()->getStatusCode()){
  53.         case 403:
  54.           $event->setResponse(new Response(null403));
  55.           break;
  56.         case 500:
  57.           $event->setResponse(new Response(null500));
  58.           break;
  59.         default: 
  60.           $event->setResponse(new JsonResponse(array('success' => false'message' => "Une erreur est survenue")));
  61.           break;
  62.       }
  63.     }else{
  64.       switch($event->getResponse()->getStatusCode()){          
  65.         case 403:
  66.           if($this->security->getUser() != null){
  67.             $response = new RedirectResponse($this->router->generate('forbidden_access'));
  68.             $event->setResponse($response);
  69.           }else{
  70.             $response = new RedirectResponse($this->router->generate('login'));
  71.             $event->setResponse($response);
  72.           }
  73.           break;
  74.         default: 
  75.           $this->mail_service->send_single_email("nicolas.deboise@spontaneit.fr""ERREUR - Webqualite ".$event->getResponse()->getStatusCode(), $content);
  76.           $this->flashBag->add(
  77.             'erreur',
  78.             $exception->getMessage()
  79.           );
  80.           $this->flashBag->add(
  81.             'referer',
  82.             $event->getRequest()->getUri()
  83.           );
  84.           $this->flashBag->add(
  85.             'line',
  86.             $exception->getLine()
  87.           );
  88.           $response = new RedirectResponse($this->router->generate('custom_error', array('_locale' => ($event->getRequest()->get('_locale')!=null)?$event->getRequest()->get('_locale'):$event->getRequest()->getDefaultLocale())));
  89.          
  90.           $event->setResponse($response);
  91.           break;
  92.       }
  93.     }
  94.   }
  95. }