<?php
namespace App\Form\Type;
use App\Validator\CustomerEmail;
use App\Validator\DateNotGreaterThanToday;
use Carbon\Carbon;
use CoreShop\Bundle\CoreBundle\Form\Type\UserRegistrationType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\CallbackTransformer;
use Symfony\Component\Form\Extension\Core\Type\BirthdayType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Constraints\Valid;
class RegistrationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('lastname', TextType::class, [
'label' => 'coreshop.form.customer.lastname',
'constraints' => [
new NotBlank([
'message' => 'A vezetéknév nem lehet üres'
])
]
])
->add('firstname', TextType::class, [
'label' => 'coreshop.form.customer.firstname',
'constraints' => [
new NotBlank([
'message' => 'A keresztnév nem lehet üres'
])
]
])
->add('email', EmailType::class, [
'label' => 'coreshop.form.customer.email',
'constraints' => [
new NotBlank([
'message' => 'Az e-mail cím nem lehet üres'
]),
new Email([
'message' => 'Érvénytelen e-mail cím'
]),
new CustomerEmail()
]
])
->add('user', UserRegistrationType::class, [
'label' => false,
'constraints' => [new Valid(['groups' => ['coreshop']])],
'allow_username' => false,
'required' => true,
])
->add('birthDate', BirthdayType::class, [
'label' => 'Születési dátum',
'widget' => 'single_text',
'attr' => [
'min' => '1900-01-01',
'max' => (new Carbon())->format('Y-m-d')
],
'constraints' => [
new DateNotGreaterThanToday(['message' => 'A dátum nem lehet nagyobb, mint a mai nap'])
],
])
->add('newsletterActive', CheckboxType::class, [
'label' => 'coreshop.form.customer.newsletter.subscribe',
'required' => false,
])
->add('submit', SubmitType::class);
$builder->get('birthDate')
->addModelTransformer(new CallbackTransformer(
function($value) {
if (empty($value)) {
return null;
}
return new Carbon($value);
},
function($value) {
if (empty($value)) {
return null;
}
return new Carbon($value);
}
));
}
public function getBlockPrefix(): string
{
return 'coreshop_customer_registration';
}
public function configureOptions(OptionsResolver $resolver): void
{
parent::configureOptions($resolver);
$resolver->setDefaults([
'csrf_protection' => true,
'allow_extra_fields' => false,
]);
}
}