src/Form/GuestFormType.php line 24

  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Form;
  4. use App\Entity\Guest;
  5. use App\Exception\InvalidDocumentNumberException;
  6. use App\Exception\InvalidFormatDocumentNumberException;
  7. use App\Exception\InvalidTypeDocumentException;
  8. use App\Service\ValidateNifNieService;
  9. use EWZ\Bundle\RecaptchaBundle\Form\Type\EWZRecaptchaType;
  10. use Symfony\Component\Form\AbstractType;
  11. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  12. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  13. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  14. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  15. use Symfony\Component\Form\FormBuilderInterface;
  16. use Symfony\Component\Form\FormError;
  17. use Symfony\Component\Form\FormEvent;
  18. use Symfony\Component\Form\FormEvents;
  19. use Symfony\Component\OptionsResolver\OptionsResolver;
  20. class GuestFormType extends AbstractType
  21. {
  22.     public function __construct(
  23.         private readonly ValidateNifNieService $validateNifNieService,
  24.     )
  25.     {
  26.     }
  27.     public function buildForm(FormBuilderInterface $builder, array $options): void
  28.     {
  29.         $builder
  30.             ->add('email'EmailType::class, [
  31.                 'label' => 'Correo electrónico*'
  32.             ])
  33.             ->add('email_confirm'EmailType::class, [
  34.                 'label' => 'Repetir correo electrónico*',
  35.                 'mapped' => false
  36.             ])
  37.             ->add('name'null, [
  38.                 'label' => 'Nombre*',
  39.                 'required' => true,
  40.             ])
  41.             ->add('surname'null, [
  42.                 'label' => 'Apellidos*',
  43.                 'required' => true,
  44.             ])
  45.             ->add('document_type'ChoiceType::class, [
  46.                 'label' => 'Tipo de documento*',
  47.                 'choices' => [
  48.                     'NIF' => 0,
  49.                     'NIE' => 2,
  50.                 ],
  51.             ])
  52.             ->add('document_number'null, [
  53.                 'label' => 'Número de documento*',
  54.             ])
  55.             ->add('token')
  56.             ->add('privacy_policy_url')
  57.             ->add('version')
  58.             ->add('accepting_date')
  59.             ->add('aceptar'CheckboxType::class, [
  60.                 'mapped' => false,
  61.                 'required' => true,
  62.                 'label' => 'He leído y acepto la política de privacidad'
  63.             ])
  64.             ->add('Enviar'SubmitType::class, [
  65.                 'label' => 'Registrarse',
  66.                 'attr' => ['class' => 'button']
  67.             ]);
  68.         $builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
  69.             $form $event->getForm();
  70.             /** @var Guest $data */
  71.             $data $event->getData();
  72.             try {
  73.                 ($this->validateNifNieService)($data->getDocumentNumber(), $data->getDocumentType());
  74.             } catch (InvalidFormatDocumentNumberException|InvalidDocumentNumberException|InvalidTypeDocumentException $exception) {
  75.                 $form->get('document_number')->addError(new FormError($exception->getMessage()));
  76.             }
  77.         });
  78.     }
  79.     public function configureOptions(OptionsResolver $resolver): void
  80.     {
  81.         $resolver->setDefaults([
  82.             'data_class' => Guest::class,
  83.         ]);
  84.     }
  85. }