Symfony 2与验证组一起形成,错误映射到错误的属性?

gre*_*emo 2 symfony-forms symfony symfony-2.4

从来没有遇到过这个问题.

  • 用手机填写表格,将姓氏留空
  • 提交表单(验证组成为DefaultCreate)
  • 错误"姓氏是必需的".映射在错误的$phone字段上,而应该是mappend到$lastName自己的属性

错误

你能重现同样的问题吗?

$phone属性在Create验证组中,而Default隐藏组中的$ phone :

class User
{
    /**
     * @Assert\NotBlank(groups={"Create"}, message="Last name is required.")
     *
     * @var string
     */
    protected $lastName;

    /**
     * @Assert\NotBlank(message="Phone is required.")
     *
     * @var string
     */
    protected $phone;
}
Run Code Online (Sandbox Code Playgroud)

我根据提交的数据确定验证组:

class UserType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('lastName', 'text');
        $builder->add('phone', 'text');
        $builder->add('submit', 'submit');
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults([
            'required' => false,
            'data_class' => 'Acme\HelloBundle\Entity\User',
            'validation_groups' => function (FormInterface $form) {    
                return null === $form->getData()->getId()
                    ? ['Default', 'Create']
                    : ['Default', 'Edit'];
            }
        ]);
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 7

您可以编辑config.yml以将API设置为2.4,而不是使用编译器传递:

validation:
    enable_annotations: true
    api: 2.4 # default is auto which sets API 2.5 BC
Run Code Online (Sandbox Code Playgroud)

当在2.5中解决错误时,只需删除api设置,您将返回到2.5向后兼容.