У меня есть форма для смены паролей, она проверяет поле password
для min_length
и required
. Затем он сравнивает поле password
с полем confirm
.
Если я отправляю в эту форму меньше минимально необходимых символов (а пароль и поле подтверждения совпадают), он выдает ошибки для минимальной длины (что ожидается) и для несоответствия пароля (неожиданно).
Может кто-нибудь сказать, почему?
<?php
class ChangeMyPasswordForm extends sfForm {
const PASSWORD_MIN_LENGTH_MSG = "<li>We could not update your password because your password must be at least 8 characters long. Please choose a different password.</li>";
const PASSWORD_MISMATCH_MSG = "<li>We could not update your password because your passwords didn't match. Please try again.</li>";
const PASSWORD_REQUIRED_MSG = "<li>We could not update your password because your password was blank. Please enter a password.</li>";
protected static $labels = array(
'password' => 'Your Password',
'confirm' => 'Re-enter Password',
);
/**
* Called in sfForm's constructor.
*/
public function configure()
{
$this->setWidgets(array(
'password' => new sfWidgetFormInputPassword(array()),
'confirm' => new sfWidgetFormInputPassword(array()),
));
$this->setValidators(array(
'password' => $this->_setPasswordValidator(),
'confirm' => new sfValidatorPass(),
));
$this->mergePostValidator(
new sfValidatorSchemaCompare('password', sfValidatorSchemaCompare::EQUAL,
'confirm', array(), array(
'invalid' => self::PASSWORD_MISMATCH_MSG,
)
)
);
$this->widgetSchema->setLabels(self::$labels);
}
/**
* Returns validators for the password field.
* @return sfValidatorString
*/
private function _setPasswordValidator()
{
$v = new sfValidatorString();
$v->setOption('min_length', 8);
$v->setMessage('min_length', self::PASSWORD_MIN_LENGTH_MSG);
$v->setMessage('required', self::PASSWORD_REQUIRED_MSG);
return $v;
}
}
edit: это может помочь => вид, куда я выкидываю ошибки
<?php if ($form->hasGlobalErrors() || $form->hasErrors()): ?>
<div class="error">
<p class="bottom"><b>Oops!</b></p>
<ul>
<?php foreach ($form->getGlobalErrors() as $name => $error): ?>
<?php echo $error ?>
<?php endforeach; ?>
<?php foreach ($form->getErrorSchema()->getErrors() as $error): ?>
<?php echo $error; ?>
<?php endforeach; ?>
</ul>
</div>
<? endif; ?>