Проверка формы Zend

Я использую Zend Form для создания динамической формы.

У меня есть также проверка формы Zend.

Попытка удалить валидацию динамически, но не добилась успеха.

Можете ли вы помочь мне удалить 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'); } } } } 

Дайте мне знать, имеет ли мой код какие-либо проблемы

Спасибо Mohammad Tareque

Вы должны удалить валидатор перед вызовом $ 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.

Просто обратите внимание, что это решение не будет работать, если требуется поле пароля

Ваш код удаляет валидатор по имени

 $value->removeValidator('ele_4af42ceac7810'); 

Обычно это что-то вроде NotEmpty или Regex в отличие от имени элемента.

Может быть, вы хотите

 $value->clearValidators(); 

Кроме того, +1 Исмаил – вы должны удалить его до вызова $form->isValid()