I have a DateType field on a form that is set to disabled=true . When a specific checkbox is checked by the user some jquery picks it up and removes the disabled property from the html but the value still doesn't get submitted by the form.
Just wondering if there is a better way to accomplish this in symfony? The date field needs to be disabled for the user unless they check the checkbox. The field is added like this:
$builder->add('overrideDate',DateType::class,[
'required'=>false,
'label'=>'Override Date',
'disabled'=>true
]);
I did try changing it via a SUBMIT event so that symfony would recognise the field as enabled since the html doesn't have the disabled anymore the field should still be getting submitted so i'm assuming that it's symfony ignoring it because of the original disabled =true ?
Here is part of the builder, i am trying to change the date field when it's submitted to disabled = false but the overrideDate is still null
$builder->add('overrideDates',CheckboxType::class,[
'label'=>'Override Dates',
'required'=>false
]);
$builder->add('overrideDate',DateType::class,[
'required'=>false,
'label'=>'Override Date',
'disabled'=>true
]);
$builder->addEventListener(FormEvents::SUBMIT,function(FormEvent $event){
$form = $event->getForm();
$data = $form->getData();
if($data->isOverridingDates()){
$form->add('overrideDate',DateType::class,[
'required'=>false,
'label'=>'Override Date',
'disabled'=>false
]);
}
});
SOLUTION
Ok this feels a bit clunky, but it works for what i want to do:
// event listener to enable/disable the overrideDate field if overrideDates === true
$builder->addEventListener(FormEvents::PRE_SUBMIT,function(FormEvent $event){
// get form and data
$form = $event->getForm();
$data = $event->getData();
// add the overridedDate field back into the form
$form->add('overrideDate',DateType::class,[
'required'=>false,
'label'=>'Override Date',
'disabled'=>((bool)$data['overrideDates'] === true ? false : true)
]);
});