src/Controller/Website/ForgotPasswordController.php line 16

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Website;
  3. use App\Entity\Token;
  4. use App\Form\ForgotPasswordType;
  5. use App\Repository\UserRepository;
  6. use App\Service\MailerService;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  12. use Symfony\Component\String\ByteString;
  13. class ForgotPasswordController extends AbstractController
  14. {
  15.     #[Route('/mot-de-passe-oublie'name'password.forgot')]
  16.     public function __invoke(
  17.         Request $requestMailerService $mailerServiceUserRepository $userRepository
  18.     ): Response {
  19.         $form $this->createForm(ForgotPasswordType::class);
  20.         $form->handleRequest($request);
  21.         if ($form->isSubmitted() && $form->isValid()) {
  22.             $entityManager $this->getDoctrine()->getManager();
  23.             $email $form->getData()['email'];
  24.             $user $userRepository->findOneBy(['email' => $email]);
  25.             if ($user === null) {
  26.                 $this->addFlash('success',
  27.                     'Vous allez recevoir un mail contenant le lien pour réinitialiser votre mot de passe, si l\'adresse email renseignée existe dans notre base de données.'
  28.                 );
  29.                 return $this->render('forgot-password.html.twig', [
  30.                     'form' => $form->createView(),
  31.                 ]);
  32.             }
  33.             $token = (new Token())
  34.                 ->setType(Token::RESET_PASSWORD)
  35.                 ->setValue(ByteString::fromRandom(32))
  36.                 ->setUser($user)
  37.             ;
  38.             $entityManager->persist($token);
  39.             $entityManager->flush();
  40.             $this->addFlash('success',
  41.                 'Vous allez recevoir un mail contenant le lien pour réinitialiser votre mot de passe, si l\'adresse email renseignée existe dans notre base de données.'
  42.             );
  43.             $emailTemplate $this->renderView('emails/account/reset-password.mjml.twig', [
  44.                 'url' => $this->generateUrl('password.reset', [
  45.                     'token' => $token->getValue(),
  46.                 ], UrlGeneratorInterface::ABSOLUTE_URL),
  47.             ]);
  48.             $mailerService->send($email'Réinitialisation de votre mot de passe'$emailTemplate);
  49.             return $this->render('forgot-password.html.twig', [
  50.                 'form' => $form->createView(),
  51.             ]);
  52.         }
  53.         return $this->render('forgot-password.html.twig', [
  54.             'form' => $form->createView(),
  55.         ]);
  56.     }
  57. }