src/Http/Auth/Controller/ForgotPasswordController.php line 23

Open in your IDE?
  1. <?php
  2. namespace App\Http\Auth\Controller;
  3. use App\Core\Notification\Message\User\ForgotPasswordMessage;
  4. use App\Domain\User\Entity\User;
  5. use App\Domain\User\Repository\UserRepository;
  6. use App\Http\Auth\Form\Auth\ForgotPasswordType;
  7. use DateInterval;
  8. use DateTime;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\Messenger\MessageBusInterface;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  16. #[Route(path: [
  17.     'en' => '/authentication/forgot-password',
  18.     'fr' => '/authentification/mot-de-passe-oublie',
  19. ], name'forgot_password')]
  20. class ForgotPasswordController extends AbstractController
  21. {
  22.     public function __invoke(Request $request,
  23.         UserRepository $userRepository,
  24.         MessageBusInterface $bus,
  25.         EntityManagerInterface $entityManager): Response
  26.     {
  27.         $form $this->createForm(ForgotPasswordType::class);
  28.         $form->handleRequest($request);
  29.         if ($form->isSubmitted() && $form->isValid()) {
  30.             /** @var ?User $user */
  31.             $user $userRepository->findOneBy(['email' => $form->get('email')->getData()]);
  32.             if (!is_null($user)) {
  33.                 $user->setConfirmationToken(uniqid())
  34.                     ->setConfirmationTokenExpiredAt((new DateTime())->add(new DateInterval('PT3H')));
  35.                 $bus->dispatch(new ForgotPasswordMessage($user$this->generateUrl('auth_create_password', [
  36.                     'confirmationToken' => $user->getConfirmationToken(),
  37.                 ], UrlGeneratorInterface::ABSOLUTE_URL)));
  38.                 $entityManager->flush();
  39.             }
  40.             $this->addFlash('success''Si votre compte existe, un email a été envoyé');
  41.             return $this->redirectToRoute('auth_login');
  42.         }
  43.         return $this->render('areas/auth/forgot-password.html.twig', [
  44.             'form' => $form->createView(),
  45.         ]);
  46.     }
  47. }