2012-08-12 48 views
1

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

这是我的表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 
    )); 
} 

回答

3

您在setDefaultOptions设置唯一有效的选择benzin,但需要您没有指定的领域。需要注意的是required在表单字段只设置HTML5 validation on

还要注意的是所需要的选项设置为true不会导致 服务器端验证得到应用。换句话说,如果用户 该字段提交空值(无论是与旧的浏览器或Web 服务,例如),它将被接受为有效的值,除非你 使用的Symfony的NotBlank或NOTNULL验证约束。

所以,你必须添加也NotBlank约束treibstoff领域。