У меня есть поле DateType в форме, для которой установлено значение disabled = true. Когда конкретный флажок установлен пользователем, jquery подхватывает его и удаляет отключенное свойство из html, но значение по-прежнему не отправляется формой.
Просто интересно, есть ли лучший способ сделать это в Symfony? Поле даты должно быть отключено для пользователя, если он не установит флажок. Поле добавляется так:
$builder->add('overrideDate',DateType::class,[
'required'=>false,
'label'=>'Override Date',
'disabled'=>true
]);
Я попытался изменить его с помощью события SUBMIT, чтобы symfony распознал поле как включенное, поскольку в html больше не отключено, поле все еще должно быть отправлено, поэтому я предполагаю, что Symfony игнорирует его из-за оригинал отключен = правда?
Это часть построителя, я пытаюсь изменить поле даты, когда оно отправлено на disabled = false, но overrideDate по-прежнему равно нулю
$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
]);
}
});
1012 * РЕШЕНИЕ *
Хорошо, это немного неуклюже, но это работает для того, что я хочу сделать:
// 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)
]);
});