5

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

我也有 Zend Form 验证。

尝试动态删除验证,但没有取得任何成功。

你能帮我删除 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

4

3 回答 3

4

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

于 2009-11-10T10:50:45.640 回答
3

我想出的解决方案是覆盖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 后代类时也有效。

顺便说一句,如果需要密码字段,此解决方案将不起作用

于 2010-08-27T20:01:26.943 回答
1

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

$value->removeValidator('ele_4af42ceac7810');

这通常与元素名称类似NotEmpty或相反。Regex

也许你想要

$value->clearValidators();

另外,+1 Ismael - 您应该在致电之前将其删除$form->isValid()

于 2009-11-10T10:58:05.377 回答