src/Form/GuestFormType.php line 24
<?php
declare(strict_types=1);
namespace App\Form;
use App\Entity\Guest;
use App\Exception\InvalidDocumentNumberException;
use App\Exception\InvalidFormatDocumentNumberException;
use App\Exception\InvalidTypeDocumentException;
use App\Service\ValidateNifNieService;
use EWZ\Bundle\RecaptchaBundle\Form\Type\EWZRecaptchaType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
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;
class GuestFormType extends AbstractType
{
public function __construct(
private readonly ValidateNifNieService $validateNifNieService,
)
{
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('email', EmailType::class, [
'label' => 'Correo electrónico*'
])
->add('email_confirm', EmailType::class, [
'label' => 'Repetir correo electrónico*',
'mapped' => false
])
->add('name', null, [
'label' => 'Nombre*',
'required' => true,
])
->add('surname', null, [
'label' => 'Apellidos*',
'required' => true,
])
->add('document_type', ChoiceType::class, [
'label' => 'Tipo de documento*',
'choices' => [
'NIF' => 0,
'NIE' => 2,
],
])
->add('document_number', null, [
'label' => 'Número de documento*',
])
->add('token')
->add('privacy_policy_url')
->add('version')
->add('accepting_date')
->add('aceptar', CheckboxType::class, [
'mapped' => false,
'required' => true,
'label' => 'He leído y acepto la política de privacidad'
])
->add('Enviar', SubmitType::class, [
'label' => 'Registrarse',
'attr' => ['class' => 'button']
]);
$builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
$form = $event->getForm();
/** @var Guest $data */
$data = $event->getData();
try {
($this->validateNifNieService)($data->getDocumentNumber(), $data->getDocumentType());
} catch (InvalidFormatDocumentNumberException|InvalidDocumentNumberException|InvalidTypeDocumentException $exception) {
$form->get('document_number')->addError(new FormError($exception->getMessage()));
}
});
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Guest::class,
]);
}
}