使用数组和实体验证Symfony 2表单

时间:2014-06-23 08:33:11

标签: php forms validation symfony

我正在为嵌入这样的实体类型的数组数据构建表单:

$data = array('message' => '', 'book' => new Book());
$formBld = $this->createFormBuilder($data);
$formBld->add('book', new BookType(), array(
        'label' => false,
        'constraints' => new Symfony\Component\Validator\Constraints\Valid()
     ))
     ->add('message', 'textarea')
     ->add('send', 'submit')
;

Book实体包含验证约束,但从不调用它们。缺少什么/错了?

2 个答案:

答案 0 :(得分:1)

Valid约束不支持validation groups。仅使用没有组的约束。

例如:

Acme\BlogBundle\Entity\User:
    properties:
        email:
            - Email: { groups: [registration] }
        password:
            - NotBlank: { groups: [registration] }
            - Length: { min: 7, groups: [registration] }
        city:
            - Length:
                min: 2

如果您对Valid使用UserType约束,则只会验证city Length

答案 1 :(得分:0)

正如您在此处所述,如果您已向Book实体添加了验证,则表单将自动使用指定类的这些验证。

为此,您应该将对象Book传递给表单,或者使用BookType中的data_class选项来设置Book实体。

要使用data_class选项,您可以执行以下操作:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'YourName\YourBundle\Entity\Book',
    ));
}

但是,您可以使用约束键指定不同的验证。

当您指定此Valid类约束时,您将覆盖Book实体中定义的约束。

来源:http://symfony.com/doc/current/book/forms.html#form-option-constraints