src/Form/Type/Front/Guest/RegistrationType.php line 26

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Form\Type\Front\Guest;
  4. use App\Entity\UserGuest;
  5. use App\Form\Type\EnumChoiceType;
  6. use App\Form\Type\Guest\GraduationYearType;
  7. use App\Form\Type\Guest\NameType;
  8. use App\Form\Type\Guest\PrefectureType;
  9. use App\Form\Type\Guest\SchoolNameType;
  10. use App\Model\Enum\Occupation;
  11. use Symfony\Component\Form\AbstractType;
  12. use Symfony\Component\Form\Event\SubmitEvent;
  13. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  14. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  15. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  16. use Symfony\Component\Form\Extension\Core\Type\TelType;
  17. use Symfony\Component\Form\Extension\Core\Type\TextType;
  18. use Symfony\Component\Form\FormBuilderInterface;
  19. use Symfony\Component\Form\FormEvents;
  20. use Symfony\Component\OptionsResolver\OptionsResolver;
  21. use Symfony\Component\Validator\Constraints\NotBlank;
  22. class RegistrationType extends AbstractType
  23. {
  24.     public function buildForm(FormBuilderInterface $builder, array $options)
  25.     {
  26.         $builder
  27.             ->add('occupation'EnumChoiceType::class, [
  28.                 'enum_object_class' => Occupation::class,
  29.                 'expanded' => true,
  30.             ])
  31.             ->add('name'NameType::class)
  32.             ->add('schoolName'SchoolNameType::class)
  33.             ->add('graduationYear'GraduationYearType::class)
  34.             ->add('prefecture'PrefectureType::class)
  35.             ->add('workplaceName'TextType::class)
  36.             ->add('phoneNumber'TelType::class)
  37.             ->add('user_email'EmailType::class, [
  38.                 'property_path' => 'user.email',
  39.             ])
  40.             ->add('user_username'TextType::class, [
  41.                 'property_path' => 'user.username',
  42.                 'empty_data' => '',
  43.             ])
  44.             ->add('user_plainPassword'PasswordType::class, [
  45.                 'property_path' => 'user.plainPassword',
  46.             ])
  47.             ->add('sendingEmailAllowed'CheckboxType::class, [
  48.                 'required' => false,
  49.             ])
  50.             ->add('privacyCheck'CheckboxType::class, [
  51.                 'required' => true,
  52.                 'constraints' => [
  53.                     new NotBlank([
  54.                         'message' => '個人情報の取り扱いについてをご確認ください',
  55.                     ]),
  56.                 ],
  57.             ])
  58.             ->add('termCheck'CheckboxType::class, [
  59.                 'required' => true,
  60.                 'constraints' => [
  61.                     new NotBlank([
  62.                         'message' => '利用規約をご確認ください',
  63.                     ]),
  64.                 ],
  65.             ])
  66.         ;
  67.         $builder->addEventListener(FormEvents::SUBMIT, function (SubmitEvent $event) {
  68.             $data $event->getData();
  69.             if (!$data instanceof UserGuest) {
  70.                 return;
  71.             }
  72.             $user $data->getUser();
  73.             $user->setName($data->getName()->__toString());
  74.         });
  75.     }
  76.     public function configureOptions(OptionsResolver $resolver)
  77.     {
  78.         $resolver
  79.             ->setDefault('data_class'UserGuest::class)
  80.             ->setDefault('validation_groups', ['Default''create''email_required''guest'])
  81.         ;
  82.     }
  83. }