Я использую sfDoctrineGuardPlugin. В форме изменения пароля есть три поля:Странное поведение смены формы пароля, то есть
текущий пароль, новый пароль, повторите новый пароль.
Если ток является правильным, и новый и повторите то же самое, я
$this->getUser()->getGuardUser()->setPassword($this->form->getValue('password'));
$this->getUser()->getGuardUser()->save();
Во всех браузерах, кроме то есть все в порядке, но в то есть когда save()
есть - или форма переаттестации, или перенаправлять на тот же маршрут.
В результате новая проверка текущего пароля со старыми данными (а затем с новым паролем) выдает ошибку формы. Скажите, что делать, я не понимаю, как браузер может влиять на действия сервера.
public function executeChangePassword(sfWebRequest $request) {
$this->forward404Unless($this->getUser()->isAuthenticated());
$this->form = new ChangePasswordForm();
$this->bSuccess = false;
if ($request->isMethod('post')) {
$this->form->bind($request->getParameter($this->form->getName()));
if ($this->form->isValid()) {
$this->oUser = $this->getUser();
$this->oUser->setPassword($this->form->getValue('password'));
$this->bSuccess = true;
}
}
}
class ChangePasswordForm extends BaseForm {
public function configure() {
$this->setWidgets(array(
'current_password' => new sfWidgetFormInputPassword(array(), array('class' => 'b-input-text')),
'password' => new sfWidgetFormInputPassword(array(), array('class' => 'b-input-text')),
'password_again' => new sfWidgetFormInputPassword(array(), array('class' => 'b-input-text')),
));
$this->validatorSchema['current_password'] = new slValidatorUserPassword(
array('required' => true,
'min_length' => 6,
'max_length' => 128
)
);
$this->validatorSchema['password'] = new sfValidatorString(
array(
'required' => true,
'min_length' => 6,
'max_length' => 128
)
);
$this->validatorSchema['password_again'] = new sfValidatorString(
array('required' => true,
'min_length' => 6,
'max_length' => 128
)
);
$this-> mergePostValidator(new sfValidatorSchemaCompare('password', '==', 'password_again', array(), array()));
$this->widgetSchema->setNameFormat('change_password[%s]');
}
}
Вы используете встроенную в forgot_password систему или пользовательские один? Можем ли мы увидеть сгенерированную форму html & ваше действие для обработки формы? – j0k
Добавлены действия. Да, пользовательское действие. ChangePasswordForm расширяет BaseForm. – Karmazzin
Можете ли вы добавить класс ChangePasswordForm? – j0k