src/EventSubscriber/FailedMessageSubscriber.php line 31

  1. <?php
  2. namespace App\EventSubscriber;
  3. use Psr\Log\LoggerInterface;
  4. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  5. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\Mailer\MailerInterface;
  8. use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
  9. use Symfony\Component\Mime\Address;
  10. class FailedMessageSubscriber implements EventSubscriberInterface
  11. {
  12.     private MailerInterface $mailer;
  13.     private ParameterBagInterface $params;
  14.     public function __constructMailerInterface $mailerInterfaceLoggerInterface $loggerParameterBagInterface $params)
  15.     {
  16.         $this->mailer $mailerInterface;        
  17.         $this->params $params;
  18.     }
  19.     public static function getSubscribedEvents(): array
  20.     {
  21.         return [            
  22.             WorkerMessageFailedEvent::class => 'onMessageFailed'
  23.         ];
  24.     }
  25.     public function onMessageFailedWorkerMessageFailedEvent $event): void {
  26.          $error $event->getThrowable()->getMessage();
  27.          $trace $event->getThrowable()->getTraceAsString();
  28.          $emailFrom $this->params->get('app.email_from');
  29.          $emailTo $this->params->get('app.email_administrateur');
  30.          $email = (new TemplatedEmail())
  31.          ->from(new Address($emailFrom'Valoire-Estel KAT'))
  32.          ->to($emailTo)
  33.          ->subject('An error has been occured')
  34.          ->htmlTemplate('emails/errors/error.html.twig')
  35.          ->context([
  36.              'error' => [
  37.                 'date' => date('Y-m-d H:i:m',strtotime('now') ),
  38.                 'context' => 'Message queue',
  39.                 'message' => $error,
  40.                 'trace' => $trace
  41.              ],
  42.          ]); 
  43.          $this->mailer->send($email);  
  44.     }
  45. }