src/Controller/Website/ForgotPasswordController.php line 66

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 $request, MailerService $mailerService, UserRepository $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. }