src/Controller/SecurityController.php line 47
<?phpnamespace Cms\Controller;use Cms\Entity\User;use Cms\Form\RegistrationFormType;use Cms\Repository\UserRepository;use Cms\Security\EmailVerifier\EmailVerifier;use Doctrine\ORM\EntityManagerInterface;use Symfony\Bridge\Twig\Mime\TemplatedEmail;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Mime\Address;use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;class SecurityController extends AbstractController{private EmailVerifier $emailVerifier;public function __construct(EmailVerifier $emailVerifier){$this->emailVerifier = $emailVerifier;}#[Route('/login', name: 'cms_security_login', methods: ['GET', 'POST'])]public function login(AuthenticationUtils $authenticationUtils): Response{$lastUsername = $authenticationUtils->getLastUsername();$lastError = $authenticationUtils->getLastAuthenticationError();return $this->render('security/login.html.twig', ['last_username' => $lastUsername,'error' => $lastError,]);}#[Route('/logout', name: 'cms_security_logout')]public function logout(): void{}#[Route('/register', name: 'cms_security_register')]public function register(Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager): Response{$user = new User();$form = $this->createForm(RegistrationFormType::class, $user);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {// encode the plain password$user->setPassword($userPasswordHasher->hashPassword($user,$form->get('plainPassword')->getData()));$entityManager->persist($user);$entityManager->flush();// generate a signed url and email it to the user$this->emailVerifier->sendEmailConfirmation('cms_verify_email', $user,(new TemplatedEmail())->from(new Address('admin@admin.com', 'Test CMS'))->to($user->getEmail())->subject('Please Confirm your Email')->htmlTemplate('security/confirmation_email.html.twig'));// do anything else you need here, like send an emailreturn $this->redirectToRoute('cms_main_index');}return $this->render('security/register.html.twig', ['registrationForm' => $form->createView(),]);}#[Route('/verify/email', name: 'cms_security_verify_email')]public function verifyUserEmail(Request $request, UserRepository $userRepository): Response{$id = $request->get('id');if (null === $id) {return $this->redirectToRoute('cms_security_register');}$user = $userRepository->find($id);if (null === $user) {return $this->redirectToRoute('cms_security_register');}// validate email confirmation link, sets User::isVerified=true and persiststry {$this->emailVerifier->handleEmailConfirmation($request, $user);} catch (VerifyEmailExceptionInterface $exception) {$this->addFlash('verify_email_error', $exception->getReason());return $this->redirectToRoute('cms_security_register');}$this->addFlash('success', 'Your email address has been verified.');return $this->redirectToRoute('cms_main_index');}}