Zend表单验证

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

3个回答

4

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


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子类时,该解决方案也适用。

顺便提一下,如果密码字段是必填的,则此解决方案无法正常工作


1

你的代码正在通过名称移除验证器

$value->removeValidator('ele_4af42ceac7810');

这通常是像NotEmptyRegex这样的东西,而不是元素名称。

也许你想要

$value->clearValidators();

此外,+1 Ismael - 在调用$form->isValid()之前应将其删除。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接