forms - Symfony 2 : The option "validation_constraint" does not exist

标签 forms validation symfony symfony-2.3

我有一个非常简单的表格,没有课。我制作了一些带有约束选项的项目,但表单验证不起作用。
我读过好几个地方 ( e.g here )
我可以添加一个 validation_constraint参数是 \Symfony\Component\Validator\Constraints\Collection实例。

当我尝试时,我总是收到一条错误消息:

The option "validation_constraint" does not exist. Known options are: ... 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。

可能是什么问题呢?

最佳答案

必须使用 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

关于forms - Symfony 2 : The option "validation_constraint" does not exist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18147834/

相关文章:

javascript - 如何以编程方式计算两种颜色之间的对比度?

javascript - 需要验证 dd/mm/yy hh :mmtt in Javascript

symfony - 如何创建两个相关的单选按钮?

html - 如何修复CSS填充

html - 告诉 input[type=text] 字段有一些 margin-left 使用所有剩余的宽度(比如宽度为 :auto does)? 的 div

javascript - 输入元素上的 knockout validation 错误类

php - Symfony 4 - 如何在测试前运行 Doctrine 迁移?

forms - 我应该对用户名施加什么限制

javascript - IE 问题 : Submitting form to an iframe using javascript

php - 在 Symfony Bundle 的 View 中显示 Sonata Admin Bundle