0
votes

so i'm building a webapp with symfony, and i'm asking if its possible to create two different users ( Candidate and Recruiter ) with the same registration form. I think adding a Choicetype that says, if it's true create a Candidate, and if it's false create a recruiter , can resolve the problem but I don't know how to create two distinct users in the controller and what to put in the "public function configureOptions(OptionsResolver..."

Here's the RegistrationFormType :

class RegistrationFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
    $builder
        ->add('email', null, array(
            'label' => false
        ))

        ->add('jeSuisUnCandidat', ChoiceType::class, [
            'label' => 'Je suis un candidat :',
            'mapped' => false,
            'choices' => [
                'oui' => true,
                'non' => false,
            ],
            'constraints' => [
                new NotBlank([
                    'message' => 'Veuillez répondre par oui ou non',
                ]),
            ],
        ])
        ->add('agreeTerms', CheckboxType::class, [

            'mapped' => false,
            'constraints' => [
                new NotBlank([
                    'message' => 'Vous devez accepter nos conditions',
                ]),
            ],
        ])
        ->add('plainPassword', PasswordType::class, [
            // instead of being set onto the object directly,
            // this is read and encoded in the controller
            'label' => false,
            'mapped' => false,
            'attr' => ['autocomplete' => 'new-password'],
            'constraints' => [
                new NotBlank([
                    'message' => 'Veuillez entrer un mot de passe',
                ]),
                new Length([
                    'min' => 6,
                    'minMessage' => 'Your password should be at least {{ limit }} characters',
                    // max length allowed by Symfony for security reasons
                    'max' => 4096,
                ]),
            ],
        ]);
}

public function configureOptions(OptionsResolver $resolver): void
{
    $resolver->setDefaults([
        'data_class' => Candidat::class,
    ]);
}

}

The RegistrationController.php :

class RegistrationController extends AbstractController
{
private EmailVerifier $emailVerifier;

public function __construct(EmailVerifier $emailVerifier)
{
    $this->emailVerifier = $emailVerifier;
}

#[Route('/register', name: 'app_register')]
public function register(Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager): Response
{
    $user = new Candidat();
    $form = $this->createForm(RegistrationFormType::class, $user);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        // encode the plain password
        $user->setPassword(
            $userPasswordHasher->hashPassword(
                $user,
                $form->get('plainPassword')->getData()
            )
        );

        $entityManager->persist($user);
        $entityManager->flush();

        // generate a signed url and email it to the user
        $this->emailVerifier->sendEmailConfirmation('app_verify_email', $user,
            (new TemplatedEmail())
                ->from(new Address('support@example', 'TRT Conseil'))
                ->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 $this->redirectToRoute('app_verify_email');
    }

    return $this->render('registration/register.html.twig', [
        'registrationForm' => $form->createView(),
    ]);


}

#[Route('/verify/email', name: 'app_verify_email')]
public function verifyUserEmail(Request $request, TranslatorInterface $translator): Response
{
    $this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');

    // validate email confirmation link, sets User::isVerified=true and persists
    try {
        $this->emailVerifier->handleEmailConfirmation($request, $this->getUser());
    } catch (VerifyEmailExceptionInterface $exception) {
        $this->addFlash('verify_email_error', $translator->trans($exception->getReason(), [], 'VerifyEmailBundle'));

        return $this->redirectToRoute('app_register');
    }

    // @TODO Change the redirect on success and handle or remove the flash message in your templates
    $this->addFlash('success', 'Your email address has been verified.');

    return $this->redirectToRoute('app_register');
}

}

Please help me, thank you