Zend-форма - почему проверка не проходит? - PullRequest
0 голосов
/ 12 декабря 2011

У меня есть поле пароля, которое необходимо заполнить в форме:

$pwd = $this->CreateElement('password', 'pwd')
        ->setLabel('Change Password')
        ->setRequired(true)
        ->addValidator('StringLength', false, array(6, 16))
        ->addValidator('regex', false, array('pattern' => $allowed_pattern))
        ->addErrorMessages(array(
            'regexNotMatch' => "Only alpha-numeric characters and some punctuation are allowed.",
        ))
        ->addFilter('StringTrim');

Но в случае РЕДАКТИРОВАНИЯ формы я не хочу требовать это поле.Там я использую:

    $form->getElement('pwd')->setRequired(false);

в моем контроллере перед передачей формы в представление.Когда я проверяю свойства этого элемента формы, у меня устанавливается _allowEmpty, равный 1, и _required, равный 0. Однако когда форма отправляется (с пустым полем), она не проходит проверку в этом поле и возвращает сообщение об ошибке для валидатора RexEx выше.

Есть идеи, почему поле не проходит валидацию при этих обстоятельствах?

1 Ответ

0 голосов
/ 12 декабря 2011

Тем не менее, вы можете улучшить метод создания элемента формы,

  1. Удалите setRequired(true) здесь и укажите true или false, где вы хотите использовать этот элемент формы (я думаю, что вы указалиtrue и false для одного и того же элемента).

  2. Когда вы отправляете пустую форму, она возвращает addValidator('StringLength', false, array(6, 16)) ошибку, потому что

  3. , если выУкажите функцию addErrorMessages(), она отключит все другие сообщения валидатора и сохранит сообщения массива, а также потому, что вы забыли упомянуть, добавить элемент сообщения об ошибке для длины строки.

Посмотрите на следующий пример и попробуйте применить его для вашего случая.

$samplepassword=$this->createElement('samplepassword','samplepassword');
    $samplepassword->setLabel('Password')
            ->addValidator('NotEmpty')
            ->addValidator('StringLength',false,array('min'=>6,'max'=>16,'encoding' => 'UTF-8','messages'=>array(
                                            'stringLengthTooShort' => 'Passwords must be 6 char mi',
                                            'stringLengthTooLong' => 'Passwords must be no longer 16 something like that'
                                        )))
            ->addValidator('regex', false, array('pattern' => $allowedstring,  messages'=>array('regexNotMatch'=>'Passwords should alphabet or something')));
...