src/Controller/RegistrationController.php line 21

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use App\Entity\School;
  5. use App\Repository\SchoolRepository;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  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\Security\Core\Exception\AccessDeniedException;
  13. class RegistrationController extends AbstractController
  14. {
  15.     /**
  16.      * @Route("/register", name="app_register")
  17.      */
  18.     public function register(
  19.         Request $request
  20.         UserPasswordHasherInterface $passwordHasher,
  21.         EntityManagerInterface $entityManager,
  22.         SchoolRepository $schoolRepository
  23.     ): Response {
  24.         // Si l'utilisateur est déjà connecté, rediriger vers l'admin
  25.         if ($this->getUser()) {
  26.             return $this->redirectToRoute('admin');
  27.         }
  28.         $error null;
  29.         $success false;
  30.         if ($request->isMethod('POST')) {
  31.             $username $request->request->get('username');
  32.             $password $request->request->get('password');
  33.             $confirmPassword $request->request->get('confirm_password');
  34.             $fullname $request->request->get('fullname');
  35.             $email $request->request->get('email');
  36.             $schoolId $request->request->get('school');
  37.             $roleType $request->request->get('role_type''user');
  38.             // Validation
  39.             if (empty($username) || empty($password) || empty($fullname)) {
  40.                 $error 'Tous les champs obligatoires doivent être remplis.';
  41.             } elseif ($password !== $confirmPassword) {
  42.                 $error 'Les mots de passe ne correspondent pas.';
  43.             } elseif (strlen($password) < 6) {
  44.                 $error 'Le mot de passe doit contenir au moins 6 caractères.';
  45.             } else {
  46.                 // Vérifier si l'utilisateur existe déjà
  47.                 $existingUser $entityManager->getRepository(User::class)->findOneBy(['username' => $username]);
  48.                 if ($existingUser) {
  49.                     $error 'Ce nom d\'utilisateur existe déjà.';
  50.                 } else {
  51.                     // Créer le nouvel utilisateur
  52.                     $user = new User();
  53.                     $user->setUsername($username);
  54.                     $user->setFullname($fullname);
  55.                     $user->setEmail($email);
  56.                     $user->setPassword($passwordHasher->hashPassword($user$password));
  57.                     $user->setIsActive(true);
  58.                     // Définir le rôle selon le type sélectionné
  59.                     $user->setRoleByType($roleType);
  60.                     // Associer l'école si sélectionnée
  61.                     if ($schoolId) {
  62.                         $school $schoolRepository->find($schoolId);
  63.                         if ($school) {
  64.                             $user->setSchool($school);
  65.                         }
  66.                     }
  67.                     try {
  68.                         $entityManager->persist($user);
  69.                         $entityManager->flush();
  70.                         $success true;
  71.                     } catch (\Exception $e) {
  72.                         $error 'Une erreur est survenue lors de l\'enregistrement.';
  73.                     }
  74.                 }
  75.             }
  76.         }
  77.         // Récupérer toutes les écoles pour le formulaire
  78.         $schools $schoolRepository->findAll();
  79.         return $this->render('registration/register.html.twig', [
  80.             'error' => $error,
  81.             'success' => $success,
  82.             'schools' => $schools,
  83.             'last_username' => $request->request->get('username'''),
  84.             'last_fullname' => $request->request->get('fullname'''),
  85.             'last_email' => $request->request->get('email'''),
  86.             'last_school' => $request->request->get('school'''),
  87.             'last_role_type' => $request->request->get('role_type''user'),
  88.         ]);
  89.     }