Forms 如何验证OneToMany实体表单集合?

Forms 如何验证OneToMany实体表单集合?,forms,symfony,validation,symfony-2.1,Forms,Symfony,Validation,Symfony 2.1,我有一个products表,它与product to departments表具有一对多关系,其中产品可以与一个或多个部门关联 我在添加新产品以验证我的部门时遇到问题 如果我没有选择一个部门,表单仍然会验证和提交 这里是我构建表单的地方 class NewProductType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) {

我有一个products表,它与product to departments表具有一对多关系,其中产品可以与一个或多个部门关联

我在添加新产品以验证我的部门时遇到问题

如果我没有选择一个部门,表单仍然会验证和提交

这里是我构建表单的地方

class NewProductType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('departments', 'collection', array(
            'type' => new ProductDepartmentType(),
            'required' => true,
        ));
...
集合是通过ProductDepartmentType类设置的:

class ProductDepartmentType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('department', 'entity', array(
            'property' => 'indentedName',
            'class' => 'WebIllumination\SiteBundle\Entity\Department',
            'query_builder' => function(EntityRepository $er) {
                return $er->createQueryBuilder('d')
                    ->addSelect('dd')
                    ->leftJoin('d.descriptions', 'dd')
                    ->orderBy('d.displayOrder', 'ASC');
            },
            'required' => true,
            'empty_value' => '- Select a Department -',
        ), array());
        $builder->add('displayOrder', 'hidden');
    }

    public function getDefaultOptions(array $options)
    {
        $collectionConstraint = new Collection(array(
            'department' => array(
                new NotBlank(array('message' => 'Select a department.')),
            ),
        ));

        return array(
            'validation_constraint' => $collectionConstraint,
        );
    }

    public function getName()
    {
        return 'site_product_department';
    }
}
然后,我尝试将以下内容添加到ProductDepartmentType中:

class ProductDepartmentType extends AbstractType
{
...
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'WebIllumination\SiteBundle\Entity\ProductToDepartment'
        ));
    }
...
这没有影响,表单仍然可以在未经验证的情况下提交


是否有人可以帮助我确定如何验证此字段?

当您有嵌套表单时,默认情况下不会将错误传递给父表单。在子窗体中,需要在要验证的字段上设置
error\u bubbling=>true
,这将把错误传递给父窗体

当您有嵌套表单时,默认情况下错误不会传递给父表单。在子窗体中,需要在要验证的字段上设置
error\u bubbling=>true
,这将把错误传递给父窗体

我原以为是这样,但没什么区别。我原以为是这样,但没什么区别。