<?php
namespace App\Form\Account;
use App\Entity\Account\User;
use Karser\Recaptcha3Bundle\Form\Recaptcha3Type;
use Karser\Recaptcha3Bundle\Validator\Constraints\Recaptcha3;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormError;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Contracts\Translation\TranslatorInterface;
class RegistrationFormType extends AbstractType
{
public function __construct(
private TranslatorInterface $translator,
) {}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('firstName', TextType::class, [
'label' => 'users.entity.firstName.label',
'required' => true
])
->add('lastName', TextType::class, [
'label' => 'users.entity.lastName.label',
'required' => true
])
->add('email', TextType::class, [
'label' => 'users.entity.email.label',
'required' => true
])
->add('password', RepeatedType::class, [
'type' => PasswordType::class,
'required' => true,
'first_options' => [
'label' => 'page.register.form.firstPassword.label',
'help' => 'page.register.form.firstPassword.help',
],
'second_options' => [
'label' => 'page.register.form.secondPassword.label',
'help' => 'page.register.form.secondPassword.help',
],
'invalid_message' => 'user.entity.password.repeated',
])
->add('training', HiddenType::class, [
'required' => false,
'mapped' => false,
])
->add('captcha', Recaptcha3Type::class, [
'constraints' => new Recaptcha3(),
'action_name' => 'registration',
'locale' => $options['locale']
])
->add('fullName', TextType::class, [
'mapped' => false,
'label' => false,
'row_attr' => [
'class' => 'd-none',
],
'required' => false,
])
;
$builder->addEventListener(FormEvents::POST_SUBMIT, function(FormEvent $event) {
$form = $event->getForm();
$fullNameFieldValue = $form->get('fullName')->getData();
if ($fullNameFieldValue !== null && $fullNameFieldValue !== '') {
$form->addError(new FormError($this->translator->trans('user.register.antispam.label', [], 'validators')));
}
});
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => User::class,
'validation_groups' => ['register'],
'locale' => 'fr',
'attr' => ['class' => 'nellapp-form'],
]);
}
}