src/Form/Account/RegistrationFormType.php line 20

Open in your IDE?
  1. <?php
  2. namespace App\Form\Account;
  3. use App\Entity\Account\User;
  4. use Karser\Recaptcha3Bundle\Form\Recaptcha3Type;
  5. use Karser\Recaptcha3Bundle\Validator\Constraints\Recaptcha3;
  6. use Symfony\Component\Form\AbstractType;
  7. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  8. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  9. use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
  10. use Symfony\Component\Form\Extension\Core\Type\TextType;
  11. use Symfony\Component\Form\FormBuilderInterface;
  12. use Symfony\Component\Form\FormError;
  13. use Symfony\Component\Form\FormEvent;
  14. use Symfony\Component\Form\FormEvents;
  15. use Symfony\Component\OptionsResolver\OptionsResolver;
  16. use Symfony\Contracts\Translation\TranslatorInterface;
  17. class RegistrationFormType extends AbstractType
  18. {
  19.     public function __construct(
  20.         private TranslatorInterface $translator,
  21.     ) {}
  22.     public function buildForm(FormBuilderInterface $builder, array $options): void
  23.     {
  24.         $builder
  25.             ->add('firstName'TextType::class, [
  26.                 'label' => 'users.entity.firstName.label',
  27.                 'required' => true
  28.             ])
  29.             ->add('lastName'TextType::class, [
  30.                 'label' => 'users.entity.lastName.label',
  31.                 'required' => true
  32.             ])
  33.             ->add('email'TextType::class, [
  34.                 'label' => 'users.entity.email.label',
  35.                 'required' => true
  36.             ])
  37.             ->add('password'RepeatedType::class, [
  38.                 'type' => PasswordType::class,
  39.                 'required' => true,
  40.                 'first_options' => [
  41.                     'label' => 'page.register.form.firstPassword.label',
  42.                     'help' => 'page.register.form.firstPassword.help',
  43.                 ],
  44.                 'second_options' => [
  45.                     'label' => 'page.register.form.secondPassword.label',
  46.                     'help' => 'page.register.form.secondPassword.help',
  47.                 ],
  48.                 'invalid_message' => 'user.entity.password.repeated',
  49.             ])
  50.             ->add('training'HiddenType::class, [
  51.                 'required' => false,
  52.                 'mapped' => false,
  53.             ])
  54.             ->add('captcha'Recaptcha3Type::class, [
  55.                 'constraints' => new Recaptcha3(),
  56.                 'action_name' => 'registration',
  57.                 'locale' => $options['locale']
  58.             ])
  59.             ->add('fullName'TextType::class, [
  60.                 'mapped' => false,
  61.                 'label' => false,
  62.                 'row_attr' => [
  63.                     'class' => 'd-none',
  64.                 ],
  65.                 'required' => false,
  66.             ])
  67.         ;
  68.         $builder->addEventListener(FormEvents::POST_SUBMIT, function(FormEvent $event) {
  69.             $form $event->getForm();
  70.             $fullNameFieldValue $form->get('fullName')->getData();
  71.             if ($fullNameFieldValue !== null && $fullNameFieldValue !== '') {
  72.                 $form->addError(new FormError($this->translator->trans('user.register.antispam.label', [], 'validators')));
  73.             }
  74.         });
  75.     }
  76.     public function configureOptions(OptionsResolver $resolver): void
  77.     {
  78.         $resolver->setDefaults([
  79.             'data_class' => User::class,
  80.             'validation_groups' => ['register'],
  81.             'locale' => 'fr',
  82.             'attr' => ['class' => 'nellapp-form'],
  83.         ]);
  84.     }
  85. }