Zend表单验证

时间:2009-11-10 10:36:29

标签: php zend-framework zend-form zend-validate

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

我也有Zend Form验证。

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

你能不能帮我删除Zend Validation。

Bellow是我删除验证的代码:

$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');
            }
        }
    }
}

让我知道我的代码是否有任何问题

由于 穆罕默德·塔雷克

3 个答案:

答案 0 :(得分:4)

您应该删除验证工具之前调用 $ form-> isValid()

答案 1 :(得分: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后代类。

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

,此解决方案将无效

答案 2 :(得分:1)

您的代码正在删除名称

的验证程序
$value->removeValidator('ele_4af42ceac7810');

这通常类似于NotEmptyRegex,而不是元素名称。

也许你想要

$value->clearValidators();

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

之前删除它