Symfony形式ChoiceType忽略了必需的属性

时间:2018-03-01 16:24:57

标签: forms symfony validation symfony-3.3 symfony3.x

在表格上我添加了一个像这样的字段

$builder->add('cse',
ChoiceType::class,
array(
    'label' => '',
    'required' => true,
    'translation_domain' => 'messages',
    'choices' => array(
        'I agree' => true
    ),
    'expanded' => true,
    'multiple' => true,
    'data' => null,
    'attr' => array( 'class' => 'form_f' ),
)

虽然所有其他字段已添加到表单中且需要'设为' true'将阻止表单被发送该字段的必需属性被忽略(无论是否检查,表单都会被发送)。

我是否必须使用Assert语句处理此问题?如果是 - 仍然:为什么要求不在这里工作?

2 个答案:

答案 0 :(得分:1)

是的,请使用Assert。

因为multiple=true打印checkbox。 Html验证程序可以测试radio,但不能测试checkbox

始终对所有表单使用Assert ,因为html验证器不安全:)

答案 1 :(得分:0)

就我而言,我无法使用断言,并且由于无法在用户端处理此问题(除非您使用 javascript),我在服务器端进行了检查,在 FormEvents::PRE_SUBMIT {{3} }:

$builder->addEventListener(
    FormEvents::PRE_SUBMIT,
    function (FormEvent $event) {
        if ($field->required && !isset($event->getData()[$field->name])) {
            $event->getForm()->addError(new FormError('One option must be chosen on "' . $field->label . '"'));
        }
    });