2012-08-12 69 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領域。