Php Zend表单验证

Php Zend表单验证,php,zend-framework,zend-form,zend-validate,Php,Zend Framework,Zend Form,Zend Validate,我正在使用Zend表单创建动态表单 我也有Zend表单验证 尝试动态删除验证,但未获得任何成功 你能帮我删除Zend验证吗 下面是我的删除验证代码: $toRemValArray = array(); $toRemValArray[0] = 'ele_4af42ceac7810'; if(isset($_POST['btnPost_x'])){ if ($form->isValid($_POST)) { $allElements

我正在使用Zend表单创建动态表单

我也有Zend表单验证

尝试动态删除验证,但未获得任何成功

你能帮我删除Zend验证吗

下面是我的删除验证代码:

$toRemValArray = array();
$toRemValArray[0] = 'ele_4af42ceac7810';

if(isset($_POST['btnPost_x'])){                 
    if ($form->isValid($_POST)) {
        $allElements = $form->getElements();
        foreach($allElements as $val){
            if(in_array('ele_4af42ceac7810',$toRemValArray)){
                $value = $form->getElement($val->getName());
                $value->removeValidator('ele_4af42ceac7810');
            }
        }
    }
}
让我知道我的代码是否有任何问题

谢谢
Mohammad Tareque

在调用$form->isValid()之前,您应该删除验证器

您的代码正在按名称删除验证器

$value->removeValidator('ele_4af42ceac7810');
这通常类似于
NotEmpty
Regex
,而不是元素名

也许你想要

$value->clearValidators();

另外,+1 Ismael-您应该在调用
$form->isValid()

之前删除它。我提出的解决方案是在我的表单类上重写
isValid
方法,如果密码字段为空,则删除密码字段上的验证器:

public function isValid($data)
{
    if (empty($data['password'])) {
        $this->form
             ->getElement('password')
             ->clearValidators();

        $this->form
             ->getElement('password_confirm')
             ->clearValidators();
    }
    return $this->form->isValid($data);
}
$this->form
是指通过组合进行扩展的表单,该解决方案在扩展Zend form子类时也能起作用

请注意,如果密码字段是必需的