2

在表单上,​​我添加了这样的字段

$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' ),
)

)

虽然添加到表单的所有其他字段“required”设置为“true”将阻止表单发送,但忽略此字段的 required 属性(无论是否选中,表单都会发送)。

我必须用 Assert 语句来处理这个问题吗?如果是 - 仍然:为什么不需要在这里工作?

4

2 回答 2

3

是的,使用断言。

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

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

于 2018-03-01T17:47:23.243 回答
0

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

$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 . '"'));
        }
    });
于 2021-02-23T14:53:22.043 回答