src\Controller\RegistrationController.php line 26

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  9. use Symfony\Component\Validator\Validator\ValidatorInterface;
  10. use Symfony\Component\Mailer\MailerInterface;
  11. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  12. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  13. use App\Entity\Utilisateur;
  14. use App\Entity\Possede;
  15. use App\Entity\Role;
  16. use App\Form\RegistrationType;
  17. class RegistrationController extends AbstractController
  18. {
  19. #[Route("/register", "app_registration_register")]
  20. public function register(Request $request, UserPasswordHasherInterface $passwordHasher, EntityManagerInterface $em, ValidatorInterface $validator, MailerInterface $mailer): Response
  21. {
  22. $utilisateur = new Utilisateur();
  23. $possede=new Possede();
  24. $role = $em->getRepository(Role::class)->findOneBy(['libelle' => 'ROLE_USER']);
  25. if (!$role) {
  26. throw new \Exception("Role with libelle 'ROLE_USER' not found");
  27. }
  28. $possede->setRoleId($role);
  29. $possede->setUtilisateurId($utilisateur);
  30. $utilisateur->addPossede($possede);
  31. $form = $this->createForm(RegistrationType::class, $utilisateur);
  32. $form->handleRequest($request);
  33. if ($form->isSubmitted() && $form->isValid()) {
  34. $utilisateur->setEmail($form->get('email')->getData());
  35. // encode the plain password
  36. $utilisateur->setPassword(
  37. $passwordHasher->hashPassword(
  38. $utilisateur,
  39. $form->get('password')->getData()
  40. )
  41. );
  42. $utilisateur->setPrenom($form->get('prenom')->getData());
  43. $utilisateur->setNom($form->get('nom')->getData());
  44. $utilisateur->setTelephone($form->get('telephone')->getData());
  45. $utilisateur->setVille($form->get('ville')->getData());
  46. $utilisateur->setPays($form->get('pays')->getData());
  47. $utilisateur->setAdressePostal($form->get('adresse_postal')->getData());
  48. $errors = $validator->validate($utilisateur);
  49. if (count($errors) === 0) {
  50. if ($form->isSubmitted() && $form->isValid()) {
  51. $em->persist($utilisateur);
  52. $em->flush();
  53. // do anything else you need here, like send an email
  54. $role = $em->getRepository(Role::class)->findOneBy(['libelle' => 'ROLE_ADMIN']);
  55. $possedes= $role->getPossedes();
  56. $email='';
  57. foreach ($possedes as $possede) {
  58. $email.= $possede->getUtilisateurId()->getEmail().',';
  59. }
  60. $email = rtrim($email, ',');
  61. $message = (new TemplatedEmail())
  62. ->from($email)
  63. ->to($utilisateur->getEmail())
  64. ->subject('Bienvenue sur notre site Vite & Gourmand')
  65. ->htmlTemplate('emails/bienvenue.html.twig')
  66. ->context([
  67. 'prenom' => $utilisateur->getPrenom(),
  68. 'nom' => $utilisateur->getNom(),
  69. ]);
  70. try {
  71. $mailer->send($message);
  72. } catch (TransportExceptionInterface $e) {
  73. // some error prevented the email sending; display an
  74. // error message or try to resend the message
  75. $this->addFlash('error', 'Une erreur est survenue lors de l\'envoi de votre message. Veuillez réessayer plus tard.');
  76. }
  77. $this->addFlash('success', 'Votre compte a été créé avec succès !');
  78. return $this->redirectToRoute('homepage');
  79. }
  80. else {
  81. foreach ($errors as $error) {
  82. $this->addFlash('error', $error->getMessage());
  83. }
  84. return $this->redirectToRoute('app_registration_register');
  85. }
  86. }
  87. }
  88. // Always return a Response, even if form is not submitted or not valid
  89. return $this->render('registration/register.html.twig', [
  90. 'form' => $form->createView(),
  91. ]);
  92. }
  93. }