Я использую 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()