在表格上我添加了一个像这样的字段
$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语句处理此问题?如果是 - 仍然:为什么要求不在这里工作?
答案 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 . '"'));
}
});