1

エンティティ クラスを使用しない単純なフォームがあります。

投稿後、バリデーターを使用して値を検証したいのですが、値が空または無効であっても、エラーリストのカウントは常にゼロです。

これが(多かれ少なかれ)私が実行しているコードです:

    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 ...
    }
4

1 に答える 1

0

$errorListフォームが有効であることを示すテスト内の要素の数を数えるので、これは正常だと思います。したがって、フォームが有効な場合は 0 が表示され、無効な場合は何も表示されません。

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

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

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

乾杯

于 2012-07-04T13:10:47.203 に答える