0

Я сейчас борюсь с этим в течение часа и до сих пор не могу понять, что не так.
Вот как я установил мои два поля:Zend_Form: идентичные поля возвращают false, когда на самом деле идентичны

$password = $this->createElement('password', 'password'); 
$password->setLabel('Password'); 
$password->setRequired('true'); 
$password->addValidator(new Zend_Validate_Regex('/^([a-zA-Z0-9]*[0-9]+[a-z]*[A-Z]+[a-zA-Z0-9]*)|([a-zA-Z0-9]*[A-Z]+[a-z]*[0-9]+[a-zA-Z0-9]*)$/')); 
$password->setAttrib('size', 25); 
$password->setAttrib('length', 150); 
$this->addElement($password); 

$confirm_password = $this->createElement('password', 'confirm_password'); 
$confirm_password->setLabel('Confirm'); 
$confirm_password->setRequired('true'); 
$confirm_password->setAttrib('size', 25); 
$confirm_password->setAttrib('length', 150); 

$confirm_password->addValidator('Identical', false, array('token' => 'password')); 
//$confirm_password->addValidator(new Zend_Validate_Identical(array('token' => 'password'))); 

$this->addElement($confirm_password); 

Я пробовал оба валидатор (+ один комментарий), но ни один не работает. Эти заявления происходят из www.wjgilmore.com/blog/entry/validating_identical_passwords_with_the_zend_framework и https://stackoverflow.com/a/3653416/1300454

Оба заявления всегда возвращаются «Две данные лексемы не совпадают» eventho Я уверен, что эти два поля содержат ту же самую строку.

Любое предположение? Спасибо!

EDIT: только замеченные благодаря XDebug, что при Zend_Validate_Identical «isValid() функции s называется, мой $token равен„пароль“в то время как мой $value приравнивает„P4ssword“(пароль я вошел в моем confirm_password поля Что происходит. ?

EDIT2: пытались с этими двумя решениями: emanaton.com/code/php/validateidenticalfield и stackoverflow.com/a/1628611/1300454, но ни один из них не работает для меня либо с родовым IdenticalField валидатор он не может найти свое поле «пароль», а второй валидатор просто возвращает это. два поля не совпадают и с XDebug снова я выяснил, что он по-прежнему ищет мой пароль «P4ssword» на слово «пароль», которое я дал в качестве имени поля ...

ответ

0

Возможно ли, что вы не используете текущая версия Zend Framework? Код в классе выглядит так, как будто он должен работать так, как вы ожидаете (1.11). Используете ли вы $ form-> isValid() или -> isValidPartial()? Попробуйте отредактировать код ZF и сбросить содержимое переменной $ context. Похоже, ваш код не заполняет переменную $ context так, как должен.

public function isValid($value, $context = null) 
{ 
    $this->_setValue((string) $value); 

    if (($context !== null) && isset($context) && array_key_exists($this->getToken(), $context)) { 
     $token = $context[$this->getToken()]; 
    } else { 
     $token = $this->getToken(); 
    } 

    if ($token === null) { 
     $this->_error(self::MISSING_TOKEN); 
     return false; 
    } 

    $strict = $this->getStrict(); 
    if (($strict && ($value !== $token)) || (!$strict && ($value != $token))) { 
     $this->_error(self::NOT_SAME); 
     return false; 
    } 

    return true; 
} 
+0

Есть ли способ, которым я мог точно сказать, какую версию я использую? –

+0

$ context содержит: ('controller' => 'user', 'action' => 'dovalidation', 'module' => 'default', 'confirm_password' => 'P4ssword') –

+0

btw, я использую ZF v1.11.3 –

Смежные вопросы