<?php
declare(strict_types=1);
namespace App\Form\Type\Front\Guest;
use App\Entity\UserGuest;
use App\Form\Type\EnumChoiceType;
use App\Form\Type\Guest\GraduationYearType;
use App\Form\Type\Guest\NameType;
use App\Form\Type\Guest\PrefectureType;
use App\Form\Type\Guest\SchoolNameType;
use App\Model\Enum\Occupation;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Event\SubmitEvent;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\TelType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\NotBlank;
class RegistrationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('occupation', EnumChoiceType::class, [
'enum_object_class' => Occupation::class,
'expanded' => true,
])
->add('name', NameType::class)
->add('schoolName', SchoolNameType::class)
->add('graduationYear', GraduationYearType::class)
->add('prefecture', PrefectureType::class)
->add('workplaceName', TextType::class)
->add('phoneNumber', TelType::class)
->add('user_email', EmailType::class, [
'property_path' => 'user.email',
])
->add('user_username', TextType::class, [
'property_path' => 'user.username',
'empty_data' => '',
])
->add('user_plainPassword', PasswordType::class, [
'property_path' => 'user.plainPassword',
])
->add('sendingEmailAllowed', CheckboxType::class, [
'required' => false,
])
->add('privacyCheck', CheckboxType::class, [
'required' => true,
'constraints' => [
new NotBlank([
'message' => '個人情報の取り扱いについてをご確認ください',
]),
],
])
->add('termCheck', CheckboxType::class, [
'required' => true,
'constraints' => [
new NotBlank([
'message' => '利用規約をご確認ください',
]),
],
])
;
$builder->addEventListener(FormEvents::SUBMIT, function (SubmitEvent $event) {
$data = $event->getData();
if (!$data instanceof UserGuest) {
return;
}
$user = $data->getUser();
$user->setName($data->getName()->__toString());
});
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver
->setDefault('data_class', UserGuest::class)
->setDefault('validation_groups', ['Default', 'create', 'email_required', 'guest'])
;
}
}