src/Controller/RegistrationController.php line 37
<?php
namespace App\Controller;
use App\Entity\Eleve;
use App\Entity\Professeur;
use App\Entity\ResponsableLegal;
use App\Entity\User;
use App\Form\RegistrationFormType;
use App\Security\Authenticator;
use App\Security\EmailVerifier;
use App\Service\UserService;
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\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\Security\Http\Authentication\UserAuthenticatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;
class RegistrationController extends AbstractController
{
private EmailVerifier $emailVerifier;
public function __construct(EmailVerifier $emailVerifier)
{
$this->emailVerifier = $emailVerifier;
}
#[Route('/register', name: 'register')]
public function register(Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager, UserAuthenticatorInterface $userAuthenticator, Authenticator $authenticator,UserService $userService): Response
{
$user = new User();
$form = $this->createForm(RegistrationFormType::class,$user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
switch ($request->get('registration_form')['type']){
case 'eleve':
$user = new Eleve();
$user->setRoles(array("ROLE_ELEVE"));
break;
case 'responsable':
$user = new ResponsableLegal();
$user->setRoles(array("ROLE_ELEVE"));
break;
case 'professeur':
$user = new Professeur();
$user->setRoles(array("ROLE_PROFESSEUR"));
break;
}
// encode the plain password
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$form->get('plainPassword')->getData()
)
);
$user->setPrenom($form->get('prenom')->getData());
$user->setNom($form->get('nom')->getData());
$user->setEmail($form->get('email')->getData());
$user->setType($form->get('type')->getData());
$entityManager->persist($user);
$entityManager->flush();
// generate a signed url and email it to the user
// $this->emailVerifier->sendEmailConfirmation('app_professeur_verify_email', $user,
// (new TemplatedEmail())
// ->from(new Address('axel@test.com', 'Bot'))
// ->to($user->getEmail())
// ->subject('Please Confirm your Email')
// ->htmlTemplate('registration/confirmation_email.html.twig')
// );
// do anything else you need here, like send an email
return $userAuthenticator->authenticateUser(
$user,
$authenticator,
$request
);
}
return $this->render('registration/register.html.twig', [
'registrationForm' => $form->createView(),
]);
}
}