src/EventSubscriber/ForgotPasswordEventSubscriber.php line 51

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Service\SendEmail;
  4. use CoopTilleuls\ForgotPasswordBundle\Event\CreateTokenEvent;
  5. use DateTime;
  6. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\HttpFoundation\JsonResponse;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  11. use Symfony\Component\Mailer\MailerInterface;
  12. use Symfony\Component\Mime\Address;
  13. use Twig\Environment;
  14. class ForgotPasswordEventSubscriber implements EventSubscriberInterface
  15. {
  16.     /**
  17.      * @var SendEmail
  18.      */
  19.     private $mailer;
  20.     /**
  21.      * @var Environment
  22.      */
  23.     private $twig;
  24.     /**
  25.      * ForgotPasswordEventSubscriber constructor.
  26.      * @param MailerInterface $mailer
  27.      * @param Environment $twig
  28.      */
  29.     public function __construct(SendEmail $mailerEnvironment $twig)
  30.     {
  31.         $this->mailer $mailer;
  32.         $this->twig $twig;
  33.     }
  34.     public static function getSubscribedEvents()
  35.     {
  36.         return [
  37.             CreateTokenEvent::class => 'onCreateToken'
  38.         ];
  39.     }
  40.     /**
  41.      * @param CreateTokenEvent $event
  42.      */
  43.     public function onCreateToken(CreateTokenEvent $event)
  44.     {
  45.         $passwordToken $event->getPasswordToken();
  46.         $user $passwordToken->getUser();
  47.         try {
  48.             /**
  49.              * @var DateInterval $interval
  50.              */
  51.             $interval date_diff(new DateTime(), $passwordToken->getExpiresAt(), true);
  52.             $this->mailer->send(
  53.                 $user->getEmail(),
  54.                 'Votre demande de réinitialisation de mot de passe',
  55.                 'reset_password/email.html.twig',
  56.                 [
  57.                     'resetToken' => $passwordToken->getToken(),
  58.                     'tokenLifetime' => $interval === false $interval->h
  59.                 ]
  60.             );
  61.         } catch (TransportExceptionInterface $e) {
  62.             throw new \RuntimeException("Une erreur s'est produite lors de l'envoi d'un e-mail pour réinitialiser votre mot de passe, veuillez réessayer plus tard.");
  63.         }
  64.         // return new JsonResponse(['message' => 'An email was sent to your inbox!'], Response::HTTP_OK);
  65.     }
  66. }