Forms Symfony2在每个字段为空时强制进行子窗体验证

Forms Symfony2在每个字段为空时强制进行子窗体验证,forms,validation,symfony,callback,Forms,Validation,Symfony,Callback,我有两个实体(我们称它们为A和B)以一对一的关系绑定,并以一种形式填充它们。 B实体字段根据实体a中的状态填充,如下所示: 实体A:状态0 实体B:两个字段都为空 实体A:国家1 实体B:字段1填充字段2空 实体A:第2国 实体B:字段1空白字段2已填充 不允许两个字段都处于已填充状态 因此,我制作了3个自定义回调验证器来检查状态1、2和not allowed。 不幸的是,当两个字段都为空时,状态1和状态2的检查不会触发,这显然是因为字段为空;事实上,向表单添加假隐藏字段会触发验证过程,因为表单

我有两个实体(我们称它们为A和B)以一对一的关系绑定,并以一种形式填充它们。 B实体字段根据实体a中的状态填充,如下所示:

实体A:状态0 实体B:两个字段都为空

实体A:国家1 实体B:字段1填充字段2空

实体A:第2国 实体B:字段1空白字段2已填充

不允许两个字段都处于已填充状态

因此,我制作了3个自定义回调验证器来检查状态1、2和not allowed。 不幸的是,当两个字段都为空时,状态1和状态2的检查不会触发,这显然是因为字段为空;事实上,向表单添加假隐藏字段会触发验证过程,因为表单已填充


显然,这是一个黑客式的解决方案,所以我想知道是否有办法强制子表单验证,即使每个表单字段都是空的。

Symfony不验证表单,而是验证实体。最好是在实体中创建验证函数,并使用symfony的“getter”验证进行验证,如下所述:


我相信在您的案例中,具有验证的实体就是与表单类型关联的实体。

感谢您的澄清。但是,我已经有了一个由@Assert\Callbacks注释调用的回调验证方法。因此,我更愿意使用此方法将错误消息设置为适当的字段。