src/Controller/Website/RegistrationController.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Website;
  3. use App\Controller\AbstractController;
  4. use App\Entity\Token;
  5. use App\Entity\User;
  6. use App\Form\RegistrationFormType;
  7. use App\Service\MailerService;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  13. use Symfony\Component\String\ByteString;
  14. class RegistrationController extends AbstractController
  15. {
  16. #[Route('/creer-un-compte', name: 'register')]
  17. public function register(
  18. Request $request, MailerService $mailerService,
  19. UserPasswordHasherInterface $userPasswordHasher
  20. ): Response {
  21. $user = new User();
  22. $entityManager = $this->getDoctrine()->getManager();
  23. $form = $this->createForm(RegistrationFormType::class, $user);
  24. $form->handleRequest($request);
  25. if ($form->isSubmitted() && $form->isValid()) {
  26. $user->setPassword(
  27. $userPasswordHasher->hashPassword(
  28. $user,
  29. $user->getPassword()
  30. )
  31. );
  32. $entityManager->persist($user);
  33. $entityManager->flush();
  34. $token = (new Token())
  35. ->setType(Token::VALIDATE_EMAIL)
  36. ->setValue(ByteString::fromRandom(32))
  37. ->setUser($user)
  38. ;
  39. $entityManager->persist($token);
  40. $entityManager->flush();
  41. $emailPath = 'emails/account/verify.mjml.twig';
  42. $emailUrl = $this->generateUrl('account.complete', [
  43. 'token' => $token->getValue(),
  44. ], UrlGeneratorInterface::ABSOLUTE_URL);
  45. $emailSubject = 'Vérification de votre email';
  46. $flashMessage = 'Nous avons pris en compte votre demande de création d\'un compte.
  47. Vous allez recevoir un email contenant un lien pour l\'activation de votre compte.';
  48. $redirectRoutePath = 'register';
  49. $emailTemplate = $this->renderView($emailPath, [
  50. 'url' => $emailUrl,
  51. ]);
  52. $mailerService->send($user->getEmail(), $emailSubject, $emailTemplate);
  53. $this->addFlash('success', $flashMessage);
  54. return $this->redirectToRoute($redirectRoutePath);
  55. }
  56. return $this->render('registration/register.html.twig', [
  57. 'registration_form' => $form->createView(),
  58. ]);
  59. }
  60. }