<?php
namespace App\Http\Auth\Controller;
use App\Core\Notification\Message\Email\Auth\ResetPasswordEmailMessage;
use App\Domain\User\Entity\User;
use App\Domain\User\Repository\UserRepository;
use App\Http\Auth\Form\ForgotPasswordType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Routing\Annotation\Route;
#[Route("/forgot-password", name: "forgot_password")]
class ForgotPasswordController extends AbstractController
{
public function __invoke(Request $request,
UserRepository $userRepository,
MessageBusInterface $messageBus): Response
{
$form = $this->createForm(ForgotPasswordType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
/** @var ?User $user */
$user = $userRepository->findOneBy(['email' => $form->get('email')->getData()]);
if (is_null($user)) {
return $this->render('auth/forgot_password.html.twig', [
'form' => $form->createView(),
'error' => true,
]);
}
$userRepository->createConfirmationToken($user);
$messageBus->dispatch(new ResetPasswordEmailMessage($user));
return $this->render('auth/forgot_password.html.twig', [
'form' => null,
]);
}
return $this->render('auth/forgot_password.html.twig', [
'form' => $form->createView()
]);
}
}