<?php
namespace Customize\Form\Extension\Front;
use Eccube\Form\Type\Front\EntryType;
use Eccube\Entity\Customer;
use Eccube\Form\Type\Master\JobType;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormError;
class EntryTypeExtension extends AbstractTypeExtension
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$options = $builder->get('company_name')->getOptions();
$options['required'] = true;
$options['constraints'] = [ new NotBlank() ];
$options['attr']['placeholder'] = '会社名';
$builder->add('company_name', TextType::class, $options);
$options = $builder->get('job')->getOptions();
$options['required'] = true;
$options['constraints'] = [ new NotBlank() ];
$builder->add('job', JobType::class, $options);
$builder->add('job_other', TextType::class, [
'required' => false,
]);
$builder
->addEventListener(FormEvents::POST_SUBMIT, function(FormEvent $event){
$form = $event->getForm()->get('job_other');
/** @var Customer $data */
$data = $event->getData();
$job = $data->getJob();
if( $job !== null ){
if( $job->getId() === 6){
if( $form->getData() === null ){
$form->addError(new FormError('業種がその他場合は、必須となります。'));
}
}
}
});
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
$Customer = $event->getData();
if ($Customer instanceof Customer && !$Customer->getId()) {
$form = $event->getForm();
$form->add('user_payment_check', CheckboxType::class, [
'required' => true,
'label' => null,
'mapped' => false,
'constraints' => [
new NotBlank(),
],
]);
}
});
}
/**
* {@inheritdoc}
*/
public function getExtendedType()
{
return EntryType::class;
}
/**
* {@inheritdoc}
*/
public static function getExtendedTypes(): iterable
{
yield EntryType::class;
}
}