src/Controller/RegistrationController.php line 27
<?phpnamespace App\Controller;use App\Entity\User;use App\Form\RegistrationFormType;use App\Repository\UserRepository;use Doctrine\DBAL\Exception\UniqueConstraintViolationException;use Doctrine\ORM\EntityManagerInterface;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Mailer\MailerInterface;use Symfony\Component\Mime\Email;use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\Routing\Generator\UrlGeneratorInterface;class RegistrationController extends AbstractController{/*** @Route("/register", name="app_register")*/public function register(Request $request, UserPasswordHasherInterface $passwordEncoder, MailerInterface $mailer, \App\Services\CompanyDetailsService $companyDetailsService, EntityManagerInterface $entityManager, UrlGeneratorInterface $urlGenerator): Response{$user = new User();$form = $this->createForm(RegistrationFormType::class, $user);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {$user->setEmailVerified(false);$user->setPassword($passwordEncoder->hashPassword($user,$form->get('plainPassword')->getData()));try {$entityManager->persist($user);$entityManager->flush();} catch (UniqueConstraintViolationException $e) {// Add a user-friendly error on the email field$loginUrl = $urlGenerator->generate('app_login');$resetUrl = $urlGenerator->generate('app_forgot_password_request'); // adjust to your route$message = sprintf("An account with this email already exists. <a href='%s'>Log in</a> or <a href='%s'>reset your password</a>.",$loginUrl,$resetUrl);$form->get('email')->addError(new FormError($message));// re-render the form with the error, no email sentreturn $this->render('registration/register.html.twig', ['registrationForm' => $form->createView(),]);}// -- send verification email only after successful flush --$companyEmail = $companyDetailsService->getCompanyDetails()->getCompanyEmail();$companyName = $companyDetailsService->getCompanyDetails()->getCompanyName();$htmlBody = $companyDetailsService->getCompanyDetails()->getRegistrationEmail();$url = $this->generateUrl('register_verify_email', ['id' => $user->getId()], UrlGeneratorInterface::ABSOLUTE_URL);$htmlSubject = $companyName . ' :: Registration confirmation';$htmlLink = "Please click on the link below to verify your email address.<br> <a class='btn btn-success' href='" . $url . "'>Verify E-mail</a> ";$emailMsg = (new Email())->from($companyEmail)->to($user->getEmail())->bcc('nurse_stephen@hotmail.com')->subject($htmlSubject)->html($htmlBody . $htmlLink);$mailer->send($emailMsg);return $this->redirectToRoute('app_login');}return $this->render('registration/register.html.twig', ['registrationForm' => $form->createView(),]);}/*** @Route("/verify/email/{id}", name="register_verify_email")*/public function verifyEmail(Request $request, int $id, UserRepository $userRepository, EntityManagerInterface $entityManager): Response{$user = $userRepository->find($id);$user->setEmailVerified(true);$entityManager->flush();return $this->redirectToRoute('app_login');}}