Проверка формы Zend - PullRequest
       7

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

5 голосов
/ 10 ноября 2009

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

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

Попытка динамического удаления валидации, но безуспешно.

Не могли бы вы помочь мне удалить Zend Validation.

Ниже приведен код удаления проверки:

$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 ]

4 голосов
/ 10 ноября 2009

Вы должны удалить валидатор ДО , вызывая $ form-> isValid () .

3 голосов
/ 28 августа 2010

Решением, которое я придумал, было переопределение метода 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 голос
/ 10 ноября 2009

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

$value->removeValidator('ele_4af42ceac7810');

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

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

$value->clearValidators();

Также +1 Исмаэль - вы должны удалить его до вызова $form->isValid()

...