我有一个包含复选框和“值字段”的表单。值字段可以是任何内容,文本框,复合字段,集合 - 任何内容。
表单可能如下所示:
field_1_label enabled [x]
value [________]
field_2_label enabled [x]
value sub_field_1 [________]
sub_field_2 [________]
field_3_label enabled [x]
value [________]
当“已启用”字段包含true
时,一切正常。当“已启用”字段包含false
时,我想禁用值字段及其子字段的验证。
因此,当取消选中“enabled”时,我将有效地忽略该字段。我仍然会在表单中显示它,但我不会存储数据,我当然不希望它被验证。
有人建议我怎么做吗?具体来说,我在验证系统忽略值字段和任何潜在的子字段时遇到问题。
答案 0 :(得分:9)
在Symfony 2.3中,您可以在validation_groups中使用false来不应用约束:
http://symfony.com/doc/current/book/forms.html#groups-based-on-the-submitted-data
例如,在包含复选框和值字段的字段中:
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver
->setDefaults([
'validation_groups' => function(FormInterface $form) {
// If the form is disabled, don't use any constraints
if ($form->get('enabled_checkbox')->getData() == false) {
return false;
}
// Otherwise, use the default validation group
return 'Default';
}
]);
}
答案 1 :(得分:2)
如果父级的复选框设置为false,则在验证之前删除子字段。
阅读食谱文章How to Dynamically Modify Forms Using Form Events中的更多内容。
订阅form events FormEvents::POST_SET_DATA
并删除订阅者中的字段。
Adding an Event Subscriber to a Fom class部分涵盖了此主题。
您还可以为您的表单引入不同的validation groups。
如果父级的复选框设置为false,则只应用另一个验证组(不包含chield字段)。