Forms Symfony表单框架:根据其他文件的值验证表单字段

Forms Symfony表单框架:根据其他文件的值验证表单字段,forms,symfony1,symfony-1.4,validation,Forms,Symfony1,Symfony 1.4,Validation,可能重复: 当选中单选按钮R时,如何取消设置一些名为A e B的表单字段? 我通常希望为这些A/B字段配置验证器,但如果选中单选按钮R,则跳过对其验证器的检查(并取消设置其值)(例如,将A和B设置为所需字符串,但在选中R时验证它们,即使它们为空) 我试图覆盖doBind函数,使用前/后验证器,但我继续收到“必需”消息 谢谢 这是一个正确的操作。我找到了一个方法,最好的方法是重写bind函数,并根据表单中的值重新定义验证器的选项(禁用必需选项或删除验证器): 公共函数绑定(数组$taintedV

可能重复:

当选中单选按钮R时,如何取消设置一些名为A e B的表单字段? 我通常希望为这些A/B字段配置验证器,但如果选中单选按钮R,则跳过对其验证器的检查(并取消设置其值)(例如,将A和B设置为所需字符串,但在选中R时验证它们,即使它们为空)

我试图覆盖doBind函数,使用前/后验证器,但我继续收到“必需”消息


谢谢

这是一个正确的操作。我找到了一个方法,最好的方法是重写
bind
函数,并根据表单中的值重新定义验证器的选项(禁用必需选项或删除验证器):

公共函数绑定(数组$taintedValues=null,数组$taintedFiles=null)
{
如果($taintedValues[“method”]=“phone”)
{
//残疾人必需
$this->validatorSchema[“email”]->setOption('required',false);
}
其他的
{
//移除验证器
$this->validatorSchema['other_field']=new-sfValidatorPass();
//和残疾人士
$this->validatorSchema[“phone”]->setOption('required',false);
}
返回父::bind($taintedValues,$taintedFiles);
}

您已经检查过了吗?我检查过了。如果我使用后验证器抛出异常,验证工作正常。但在本例中,我试图取消设置值,并通过通常根据需要设置的字段的验证。这是正确的手术吗?我找了好几个小时没有找到任何解决办法。。但是,对于doBind方法,如果我不显式地调用
bind
,它就不会被调用。有什么原因吗?应该调用它。您应该明确地调用
bind
函数来验证您的表单(即:在您的操作中)。的确,主表单A的绑定在操作中被调用。通过这种方式,表单A以及每个子表单B和C都将得到验证。但是现在我正在尝试上面所说的,所以在子表单B中我重写函数
bind
。在这种情况下,我认为会再次自动调用
bind
(但是使用了覆盖),但是没有发生。但是,也显式地调用
B->bind
A->doBind
中,问题没有得到解决。My
B->bind
函数的构建与您的示例相同,只在值中添加了unset。那么,doBind和bind的区别是什么?感谢您的帮助
doBind
bind
中调用。这就是全部。因此,似乎
bind
函数中的某个函数失败了,并且没有调用
doBind
函数。我尝试了各种方法:我创建了该函数,在A::doBind或A:bind中调用
bind
,函数被调用,但验证仍然失败。也许我忘了说这个B表单是嵌入在a中的表单。事实上,doBind也验证B表单。我也遵循这个解决方案来实现我需要的东西,但它不太管用。