<?php
namespace App\Form;
use App\Form\CustomIntegerType;
use Symfony\Component\Form\FormEvent;
use App\Form\Components\IncrementType;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\AbstractType;
use App\Entity\OptionQuantityReservation;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
class OptionQuantityReservationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('quantity', IncrementType::class, [
'label' => $options['label'],
'attr' => [
'min' => 0,
'max' => 100,
'class' => 'option-quantity',
'data_function' => 'changeExtraQuantity',
],
'allow_extra_fields' => true,
])
;
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
/** @var OptionQuantityReservation $optionQuantityReservation */
$optionQuantityReservation = $event->getData();
if($optionQuantityReservation) {
$form = $event->getForm();
$options = $form->get('quantity')->getConfig()->getOptions();
$options['label'] = sprintf("%s (%s€)", $optionQuantityReservation->getOptionQuantity()->getLabel(), $optionQuantityReservation->getOptionQuantity()->getPrice());
$options['attr']['labelValue'] = $optionQuantityReservation->getOptionQuantity()->getLabel();
$form->add('quantity', get_class($form->get('quantity')->getConfig()->getType()->getInnerType()), $options);
if($optionQuantityReservation->getOptionQuantity()->getPlaceholderCommentary()) {
$form->add('commentary', TextareaType::class, [
'attr' => [
'placeholder' => $optionQuantityReservation->getOptionQuantity()->getPlaceholderCommentary(),
],
]);
}
}
});
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => OptionQuantityReservation::class,
'with_total_quantities' => false,
]);
$resolver->setAllowedTypes('with_total_quantities', 'boolean');
}
}