如果兄弟(复选框)字段包含'false',则跳过验证

时间:2013-06-14 08:43:25

标签: symfony symfony-forms

我有一个包含复选框和“值字段”的表单。值字段可以是任何内容,文本框,复合字段,集合 - 任何内容。

表单可能如下所示:

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”时,我将有效地忽略该字段。我仍然会在表单中显示它,但我不会存储数据,我当然不希望它被验证。

有人建议我怎么做吗?具体来说,我在验证系统忽略值字段任何潜在的子字段时遇到问题。

2 个答案:

答案 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字段)。