RegisterController.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Symfony\Component\Form\Extension\Core\Type\TextType;
  10. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  11. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  12. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  13. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  14. class RegisterController extends AbstractController
  15. {
  16. /**
  17. * @Route("/register", name="register")
  18. */
  19. public function index(Request $request, UserPasswordEncoderInterface $encoder): Response
  20. {
  21. $session = $this->get('session');
  22. if (null !== $session->get('user')) {
  23. $session->save();
  24. return $this->redirectToRoute('home');
  25. }
  26. $user = new User();
  27. // Instanciation du fromBuilder
  28. $formBuilder = $this->createFormBuilder();
  29. // Ajout des champs
  30. $formBuilder
  31. ->add('identifiant', TextType::class)
  32. ->add('mot_de_passe', RepeatedType::class, array(
  33. 'type' => PasswordType::class,
  34. 'first_options' => array('label' => 'Mot de passe'),
  35. 'second_options' => array('label' => 'Répéter le mot de passe')
  36. ))
  37. ->add('description', TextareaType::class, ['required' => false])
  38. ->add('profil_prive', CheckboxType::class, ['required' => false])
  39. ->setAction($this->generateUrl('register'));
  40. // Génération du formulaire
  41. $form = $formBuilder->getForm();
  42. if ($request->getMethod() == 'POST') {
  43. $form->handleRequest($request);
  44. if ($form->isValid()) {
  45. $chosen_username = $form->get("identifiant")->getData();
  46. $em = $this->getDoctrine()->getManager();
  47. $repository_profile = $em->getRepository(User::class);
  48. $profile = $repository_profile->findOneBy(array('username' => $chosen_username));
  49. if ($profile) {
  50. return $this->render('register/index.html.twig', [
  51. 'message' => "Nom d'utilisateur déjà existant",
  52. 'form' => $form->createView()
  53. ]);
  54. }
  55. $user->setUsername($form->get("identifiant")->getData());
  56. $encoded_passwd = $encoder->encodePassword($user, $form->get('mot_de_passe')->getData());
  57. $user->setPassword($encoded_passwd);
  58. $user->setIsPrivate($form->get("profil_prive")->getData());
  59. $user->setDescription($form->get('description')->getData());
  60. $em->persist($user);
  61. $em->flush();
  62. return $this->redirectToRoute('index');
  63. }
  64. }
  65. return $this->render('register/index.html.twig', [
  66. 'form' => $form->createView(),
  67. 'message' => ""
  68. ]);
  69. }
  70. }