src/EventSubscriber/ExceptionSubscriber.php line 26

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\DBCRM\Ajustes\ConfigGlobal;
  4. use App\Service\EmailService;
  5. use App\Utils\HelperUtil;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  9. use Symfony\Component\HttpKernel\KernelInterface;
  10. use Symfony\Component\Security\Core\Security;
  11. class ExceptionSubscriber implements EventSubscriberInterface
  12. {
  13.     public function __construct(
  14.         private EmailService $emailService,
  15.         private Security $security,
  16.         private EntityManagerInterface $em,
  17.         private HelperUtil $helper,
  18.         protected string $adminEmail,
  19.         private KernelInterface $kernel
  20.     ) {
  21.     }
  22.     public function onKernelException(ExceptionEvent $event)
  23.     {
  24.         $request $event->getRequest();
  25.         if ($event->getThrowable()) {
  26.             $environment $this->kernel->getEnvironment();
  27.             if ('dev' == $environment) {
  28.                 // En entorno de desarrollo donde puedes ver los errores y los provocan los desarrolladores no tiene tanto sentido enviar el error por correo
  29.                 return true;
  30.             }
  31.             $code 000;
  32.             /*if (!array_key_exists('softdeleteable', $this->em->getFilters()->getEnabledFilters())) {
  33.                 $this->em->getFilters()->enable('softdeleteable');
  34.             }*/
  35.             $this->helper->error(null$event->getThrowable()->getMessage());
  36.             if (is_callable([$event->getThrowable(), 'getStatusCode'])) {
  37.                 if (404 == $event->getThrowable()->getStatusCode()) {
  38.                     // Por ahora solo enviariamos mail cuando son errores 500 u otros
  39.                     return true;
  40.                 }
  41.                 $code $event->getThrowable()->getStatusCode();
  42.             } elseif (is_callable([$event->getThrowable(), 'getCode'])) {
  43.                 if (404 == $event->getThrowable()->getCode()) {
  44.                     // Por ahora solo enviariamos mail cuando son errores 500 u otros
  45.                     return true;
  46.                 }
  47.                 $code $event->getThrowable()->getCode();
  48.             }
  49.             $params = [
  50.                 'asunto' => 'Error ' $code ' detectado',
  51.                 'exception' => $event->getThrowable(),
  52.                 'plantilla' => 'emails/sistema/mail_exception.html.twig',
  53.                 'plantilla_params' => [
  54.                     'currentUrl' => $request->getUri(),
  55.                     'usuario' => $this->security->getUser(),
  56.                     'message' => $event->getThrowable()->getMessage(),
  57.                     'ip' => $request->getClientIp(),
  58.                 ],
  59.                 'to' => $this->adminEmail,
  60.                 'cco' => [],
  61.             ];
  62.             $this->emailService->envioBasico($params);
  63.         }
  64.     }
  65.     public static function getSubscribedEvents(): array
  66.     {
  67.         return [
  68.             'kernel.exception' => 'onKernelException',
  69.         ];
  70.     }
  71. }