1

我有一个带有一个选择元素的简单 smyfony2 表单。当我选择“kerosin”或“diesel”时,表格不会验证,什么是正确的。当我不选择这三个选项中的任何一个并将表单提交为空时,$form->validate() 将返回 true,但它不应该。有任何想法吗?使用所需的 HTML5 对我来说不是解决方案。

这是我的表单 AbstractType:

public function buildForm(FormBuilderInterface $builder, array $options)
{

    // Form erzeugen
    $builder->add('treibstoff', 'choice', array(
            'choices' => array(
                    'kerosin' => 'form.quiz1.kerosin',
                    'benzin' => 'form.quiz1.benzin',
                    'diesel' => 'form.quiz1.diesel',
                ),
            'multiple' => false,
            'expanded' => true,
            'label' => ' '
        ))
        ->getForm();
}

public function setDefaultOptions(OptionsResolverInterface $resolver)
{

    // Validierung erzeugen
    $collectionConstraint = new Collection(array(
        'treibstoff' => array(
                new Choice(array(
                    'choices' => array('benzin'),
                    'message' => 'form.quiz.falscheantwort',
                    'strict' => true
                )
            )
        )
    ));

    $resolver->setDefaults(array(
        'validation_constraint' => $collectionConstraint
    ));
}

public function getName()
{ 
     ...

验证工作如下:

    if($Request->getMethod() == "POST") {
        $form->bind($Request);
        if($form->isValid()) {
            echo "valid";

提前致谢。

编辑:

我像建议的那样更改了 setDefaultOptions 并添加了 NotBlank。这对我有用:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{

    // Validierung erzeugen
    $collectionConstraint = new Collection(array(
        'treibstoff' => array(
            new Choice(array(
                    'choices' => array('benzin'),
                    'message' => 'form.quiz.falscheantwort',
                    'strict' => true,
                )
            ),
            new NotBlank()
        )
    ));

    $resolver->setDefaults(array(
        'validation_constraint' => $collectionConstraint
    ));
}
4

1 回答 1

3

您仅将有效选项设置为benzinin setDefaultOptions,但未按要求指定字段。请注意,required在表单字段中仅设置HTML5 验证

另请注意,将 required 选项设置为 true 不会导致应用服务器端验证。换句话说,如果用户为该字段提交了一个空白值(例如,使用旧的浏览器或 Web 服务),它将被接受为有效值,除非您使用 Symfony 的 NotBlank 或 NotNull 验证约束。

因此,您还必须向字段添加NotBlank约束。treibstoff

于 2012-08-12T12:30:50.793 回答