Symfony - 覆盖字段选项(必需 = false 到 required = true)
Symfony - Override field options (required = false to required = true)
我想完成以下任务:
FormType -> If my checkbox is checked, hide a normally required field and make it required = false, so I can submit my Form.
因此,如果我的复选框被选中,我需要覆盖特定的表单字段。示例...
形式:
$builder->add(
'checkbox',
CheckboxType::class,
[
'label' => 'checkbox',
'required' => false,
'mapped' => false,
'attr' => [
'class' => 'checkbox',
]
]
);
索引:
$('.checkbox').change(function () {
if ($('.checkbox').is(':checked')) {
$(".end-date").hide();
} else {
$(".end-date").show();
}
});
我该如何继续?
我试过类似的方法(不知何故它不起作用):
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
$form = $event->getForm();
$config = $form->get('what_ever_field')->getConfig();
$options = $config->getOptions();
$form->add(
'what_ever_field',
get_class($config->getType()->getInnerType()),
array_replace(
$options,
[
'required' => false,
]
)
);
});
但这没有任何意义,因为复选框和监听器没有关系。
我认为在页面呈现后通过 JS 动态更改字段的 required 属性会容易得多。您已完成一半:
JS
$('.checkbox').change(function() {
if ($('.checkbox').is(':checked')) {
$(".end-date").removeAttr("required");
$(".end-date").hide();
} else {
$(".end-date").attr("required","required");
$(".end-date").show();
}
});
JQuery 代码可以优化,仅此而已。希望对你有帮助。
我想完成以下任务:
FormType -> If my checkbox is checked, hide a normally required field and make it required = false, so I can submit my Form.
因此,如果我的复选框被选中,我需要覆盖特定的表单字段。示例...
形式:
$builder->add(
'checkbox',
CheckboxType::class,
[
'label' => 'checkbox',
'required' => false,
'mapped' => false,
'attr' => [
'class' => 'checkbox',
]
]
);
索引:
$('.checkbox').change(function () {
if ($('.checkbox').is(':checked')) {
$(".end-date").hide();
} else {
$(".end-date").show();
}
});
我该如何继续?
我试过类似的方法(不知何故它不起作用):
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
$form = $event->getForm();
$config = $form->get('what_ever_field')->getConfig();
$options = $config->getOptions();
$form->add(
'what_ever_field',
get_class($config->getType()->getInnerType()),
array_replace(
$options,
[
'required' => false,
]
)
);
});
但这没有任何意义,因为复选框和监听器没有关系。
我认为在页面呈现后通过 JS 动态更改字段的 required 属性会容易得多。您已完成一半:
JS
$('.checkbox').change(function() {
if ($('.checkbox').is(':checked')) {
$(".end-date").removeAttr("required");
$(".end-date").hide();
} else {
$(".end-date").attr("required","required");
$(".end-date").show();
}
});
JQuery 代码可以优化,仅此而已。希望对你有帮助。