symfony - Symfony 4 DateType 已被 jquery 禁用但未提交数据
问题描述
我在设置为 disabled=true 的表单上有一个 DateType 字段。当用户选中一个特定的复选框时,一些 jquery 会选择它并从 html 中删除 disabled 属性,但该值仍然没有被表单提交。
只是想知道在 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
]);
}
});
解决方案
好的,这感觉有点笨拙,但它适用于我想做的事情:
// 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)
]);
});
解决方案
你应该看看这里:https ://symfony.com/doc/current/form/dynamic_form_modification.html
这是做你想做的事的好方法!您应该使用 FormEvents::PRE_SUBMIT 而不是 FormEvents::SUBMIT
// 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)
]);
});
推荐阅读
- unix - 如何在 UNIX 中删除特定列的空格
- javascript - 如何更改我的代码以能够计算不同的 url 而不是当前页面
- javascript - 如何在没有承诺的情况下在 javascript 中捕获闭包/不确定函数中的错误
- node.js - 从后端 api 到前端反应应用程序的代理错误
- c# - 如何使用 Visual Studio 创建更新先前版本的安装程序?
- bash - 如何在保持格式的同时使用 rsync 的输出设置变量
- docker - 将 Dockerfile 拆分为两个图像
- angular - 使用 Firestore 进行多个查询的 CombineLatest
- .net - 在 .Net Core 中工作的互操作在 Framework 中失败
- reactjs - 从我的 api 获取用户详细信息的动态路由