我使用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');
}
}
}
}
让我知道我的代码是否有任何问题
由于 穆罕默德·塔雷克
答案 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');
这通常类似于NotEmpty
或Regex
,而不是元素名称。
也许你想要
$value->clearValidators();
另外,+1 Ismael - 您应该在调用$form->isValid()