【问题标题】:Symfony 2: The option "validation_constraint" does not existSymfony 2:选项“validation_constraint”不存在
【发布时间】:2013-08-09 13:30:59
【问题描述】:

我有一个非常简单的没有类的表单。我制作了一些带有约束选项的项目,但表单验证不起作用。
我读过几个地方(e.g here) 我可以添加一个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。

可能是什么问题?

【问题讨论】:

  • 只是为了好玩,尝试将 'validation_constraint' 更改为 'constraints'。可能不会起作用,但它可能会。
  • 谢谢,我试过了,但没有。

标签: forms validation symfony symfony-2.3


【解决方案1】:

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

【讨论】:

  • 是的,我使用了约束选项,但由于某种原因它不起作用。因此,我将“FormType”与控制器分开作为“没有类型、类等的表单”。现在可以了。我不明白。我觉得有些上当了 :) 没问题,我很高兴 :)
  • 我对我的回答有疑问,您可以试试@Cerad 的建议:使用您的代码将 'validation_constraint' 更改为 'constraints' 吗?
  • 是的,我试过了,但两者都有。我尝试了validation_groups,也没有。对不起,我之前的评论是模棱两可的。您的建议很有帮助!
  • 不知道为什么它不工作......但如果我提供的解决方案适合你,我会放在这里。
  • 我尝试了很多东西,但肯定是我把它弄丢了。我按照您建议的方式设置了所有内容,并且可以正常工作。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-23
  • 2018-08-13
相关资源
最近更新 更多