【发布时间】:2013-03-15 22:17:54
【问题描述】:
我使用 sfDoctrineGuardPlugin。密码修改的形式有三个字段:
当前密码、新密码、重复新密码。
如果当前是正确的,并且新的和重复的一样,我会这样做
$this->getUser()->getGuardUser()->setPassword($this->form->getValue('password'));
$this->getUser()->getGuardUser()->save();
在所有浏览器中,除了 ie 一切正常,但在 ie 时,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]');
}
}
【问题讨论】:
-
您使用的是内置的忘记密码系统还是自定义系统?我们可以看到生成的 html 表单和您处理表单的操作吗?
-
加起来的动作。是的,自定义操作。 ChangePasswordForm 扩展了 BaseForm。
-
你也可以加
ChangePasswordForm类吗? -
更新 ChangePasswordForm
-
对我来说一切都很好,那么显示表单的模板呢?
标签: symfony1 symfony-1.4 sfguard