emailVerifier = $emailVerifier; } #[Route('/register', name: 'app_register')] public function register(Request $request, UserPasswordHasherInterface $passwordHasher): Response { $user = new User(); $form = $this->createForm(RegistrationFormType::class, $user); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { // hash the plain password $user->setPassword( $passwordHasher->hashPassword( $user, $form->get('plainPassword')->getData() ) ); $entityManager = $this->getDoctrine()->getManager(); $entityManager->persist($user); $entityManager->flush(); // generate a signed url and email it to the user $this->emailVerifier->sendEmailConfirmation('app_verify_email', $user, (new TemplatedEmail()) ->from(new Address('tracer@24unix.net', '24unix')) ->to($user->getEmail()) ->subject('Please Confirm your Email') ->htmlTemplate('registration/confirmation_email.html.twig') ); // do anything else you need here, like send an email return $this->redirectToRoute('blogs'); } return $this->render('security/register.html.twig', [ 'registrationForm' => $form->createView(), ]); } #[Route('/verify/email', name: 'app_verify_email')] public function verifyUserEmail(Request $request, UserRepository $userRepository): Response { $id = $request->get('id'); if ($id === null) { return $this->redirectToRoute('app_login'); } $user = $userRepository->find($id); if ($user === null) { return $this->redirectToRoute('app_login'); } // validate email confirmation link, sets User::isVerified=true and persists try { $this->emailVerifier->handleEmailConfirmation($request, $user); } catch (VerifyEmailExceptionInterface $exception) { $this->addFlash('verify_email_error', $exception->getReason()); return $this->redirectToRoute('app_login'); } // @TODO Change the redirect on success and handle or remove the flash message in your templates $this->addFlash('success', 'Your email address has been verified.'); return $this->redirectToRoute('blogs'); } }