4

クラスのない非常にシンプルなフォームがあります。制約オプションを使用していくつかのアイテムを作成しましたが、フォームの検証が機能しません。インスタンスであるパラメーターを追加できるいくつかの場所(たとえばここ
)を 読みました。validation_constraint\Symfony\Component\Validator\Constraints\Collection

試してみると、常にエラーメッセージが表示されます:

オプション「validation_constraint」は存在しません。既知のオプションは次のとおりです: ... blabla

私のフォーム:

$collectionConstraint = new \Symfony\Component\Validator\Constraints\Collection(
            array(
                'customer' => new \Symfony\Component\Validator\Constraints\NotBlank(),
                'customer_address' => new \Symfony\Component\Validator\Constraints\NotBlank(),
                'customer_address_postal' => new \Symfony\Component\Validator\Constraints\NotBlank(),
                'paymentDeadline' => new \Symfony\Component\Validator\Constraints\Date(),
                'fulfillmentDate' => new \Symfony\Component\Validator\Constraints\Date(),

                'currency' => new \Symfony\Component\Validator\Constraints\Choice(array(
                    'choices' => $currency_entities
                )),

                'paymode' => new \Symfony\Component\Validator\Constraints\Choice(array(
                    'choices' => $paymode_entities
                ))
            )
        );

$form = $this->createFormBuilder(null,array(
            'validation_constraint' => $collectionConstraint
            ))
            ->add('customer','choice',array(
                'choice_list'=> $customer_choices, 
                'multiple' => false,
                'required' => true,
                'empty_value' => '',
                'attr'   =>  array(
                    'class'   => 'chosen large',
                )
            ))
            ->add('customer_address','choice',array(
                'multiple' => false,
                'required' => true,
                'empty_value' => '',
                'attr'   =>  array(
                    'class'   => 'chosen large'
                )
            ))
            ->add('customer_address_postal','choice',array(
                'multiple' => false,
                'required' => true,
                'empty_value' => '',
                'attr'   =>  array(
                    'class'   => 'chosen large'
                )
            ))
            ->add('paymentDeadline','date',array(
                'input' => 'datetime',
                'widget' => 'single_text',
                'required' => true,
                'attr'   =>  array(
                    'class'   => 'date-picker m-ctrl-medium',
                    'addon' => 'icon-calendar',
                )
            ))
            ->add('fulfillmentDate','date',array(
                'input' => 'datetime',
                'widget' => 'single_text',
                'required' => true,
                'attr'   =>  array(
                    'class'   => 'date-picker m-ctrl-medium',
                    'addon' => 'icon-calendar',
                )
            ))
            ->add('currency','choice',array(
                'required' => true,
                'choice_list' => $curreny_choices
            ))
            ->add('paymode','choice',array(
                'required' => true,
                'choice_list' => $paymode_choices

            ))
            ->add('subject','text',array(
                'required' => false,
                'attr' => array(
                    'class' => 'span8'
                )
            ))
            ->add('comment','textarea',array(
                'required' => false,
                'attr' => array(
                    'class' => 'span8',
                    'rows' => 5
                )
            ))
        ;

Symfony のバージョンは 2.3.3 です。

何が問題なのですか?

4

1 に答える 1

2

検証はconstraints、フォーム ビルダーではなく、オプションを使用して各フィールドに適用する必要があります。
したがって、コードは次のようになります。

use \Symfony\Component\Validator\Constraints\NotBlank;
use \Symfony\Component\Validator\Constraints\Date;
use \Symfony\Component\Validator\Constraints\Choice;

$form = $this->createFormBuilder(null)
            ->add('customer','choice',array(
                'choice_list'=> $customer_choices, 
                'multiple' => false,
                'required' => true,
                'empty_value' => '',
                'attr'   =>  array(
                    'class'   => 'chosen large',
                ),
                'constraints' => new NotBlank()
            ))
            ->add('customer_address','choice',array(
                'multiple' => false,
                'required' => true,
                'empty_value' => '',
                'attr'   =>  array(
                    'class'   => 'chosen large'
                ),
                'constraints' => new NotBlank()
            ))
            ->add('customer_address_postal','choice',array(
                'multiple' => false,
                'required' => true,
                'empty_value' => '',
                'attr'   =>  array(
                    'class'   => 'chosen large'
                ),
                'constraints' => new NotBlank()
            ))
            ->add('paymentDeadline','date',array(
                'input' => 'datetime',
                'widget' => 'single_text',
                'required' => true,
                'attr'   =>  array(
                    'class'   => 'date-picker m-ctrl-medium',
                    'addon' => 'icon-calendar',
                ),
                'constraints' => new Date()
            ))
            ->add('fulfillmentDate','date',array(
                'input' => 'datetime',
                'widget' => 'single_text',
                'required' => true,
                'attr'   =>  array(
                    'class'   => 'date-picker m-ctrl-medium',
                    'addon' => 'icon-calendar',
                ),
                'constraints' => new Date()
            ))
            ->add('currency','choice',array(
                'required' => true,
                'choice_list' => $curreny_choices,
                'constraints' => new Choice(array(
                    'choices' => $currency_entities
                )),
            ))
            ->add('paymode','choice',array(
                'required' => true,
                'choice_list' => $paymode_choices,
                'constraints' => new Choice(array(
                    'choices' => $paymode_entities
                ))

            ))
            ->add('subject','text',array(
                'required' => false,
                'attr' => array(
                    'class' => 'span8'
                )
            ))
            ->add('comment','textarea',array(
                'required' => false,
                'attr' => array(
                    'class' => 'span8',
                    'rows' => 5
                )
            ))
        ;

注:useコードを明確にするために、いくつかのステートメントを先頭に追加しました。

http://symfony.com/doc/current/book/forms.html#adding-validation

于 2013-08-09T14:25:22.363 に答える