2012-05-10 1 views
1

私はエンティティクラスを使用しない単純なフォームを使用します。フォームは、空の値または無効な値でも常に検証をパスします。

投稿後、バリデーターを使用して値を検証したいが、値が空であるか無効であってもエラーリストのカウントは常にゼロです。私はあなたがフォームが有効であることを伝え、テスト内$errorList内の要素の数をカウントするので、これは正常だと思い

use Symfony\Component\Validator\Constraints\Email; 
    use Symfony\Component\Validator\Constraints\MinLength; 
    use Symfony\Component\Validator\Constraints\Collection; 


    public function formAction(){ 
     $collectionConstraint = new Collection(array(
      'name' => array(new MinLength(5)), 
      'email' => array(new Email(array('message' => 'Invalid email address'))), 
     )); 

     $options = array('validation_constraint' => $collectionConstraint); 
     $form = $this->createFormBuilder(null, $options) 
       ->add('name', 'text', array('label' => '', 'attr' => array('placeholder' => 'Your name'))) 
       ->add('email', 'email', array('label' => '', 'attr' => array('placeholder' => 'E-mail'))) 
       ->getForm(); 

     $request = $this->getRequest(); 
     $error = false; 
     if ($request->getMethod() == 'POST') { 
      $form->bindRequest($request); 

      if ($form->isValid()) { 
       $data  = $form->getData(); 
       $errorList = $this->get('validator')->validateValue($data, $collectionConstraint); 

       // count($errorList) is always zero even when the values are empty or invalid… 
      } 
      else { 
       $error = true; 
      } 
     } 

     // ... snip ... 
    } 

答えて

0

:ここ

は(多かれ少なかれ)私が実行していたコードです。だから私は、フォームが有効なときには0を表示し、そうでないときは何も表示しないと言います。

$form->isValid()ステートメントで既に実行されている検証を手作業で実行する必要はありません。

発生した制約違反の数を数えたい場合は、$form->isValid()を呼び出してcount($form->getErrors())を実行してください。

最後に、まだ完了していない場合は、確実にhttp://symfony.com/doc/current/book/forms.html#using-a-form-without-a-classを読んでください。

乾杯

+0

ええ、私はすでにそれを持って、エラーはありません。 私の質問は、それが想定どおりに動作しない理由です。 無効なメールがある場合、またはフィールドが空に設定されている場合は、フォームが送信されていない場合にエラーが発生する可能性があります。 この問題を提出する前に、 – cristobal

関連する問題