Symfony1 ie中密码形式变化的奇怪行为

Symfony1 ie中密码形式变化的奇怪行为,symfony1,symfony-1.4,sfguard,Symfony1,Symfony 1.4,Sfguard,我使用sfDoctrineGuardPlugin。密码更改的形式有三个字段: 当前密码,新密码,重复新密码 如果电流是正确的,新的和重复相同,我做 $this->getUser()->getGuardUser()->setPassword($this->form->getValue('password')); $this->getUser()->getGuardUser()->save(); 在除ie之外的所有浏览器中,一切正常,但在ie中,当s

我使用sfDoctrineGuardPlugin。密码更改的形式有三个字段:

当前密码,新密码,重复新密码

如果电流是正确的,新的和重复相同,我做

$this->getUser()->getGuardUser()->setPassword($this->form->getValue('password'));
$this->getUser()->getGuardUser()->save();
在除ie之外的所有浏览器中,一切正常,但在ie中,当
save()
is-或重新验证表单,或重定向到同一路径时

结果,使用旧数据对当前密码进行新检查(然后使用新密码),抛出表单错误。 告诉我该怎么做,我不明白浏览器如何影响服务器操作

public function executeChangePassword(sfWebRequest$request){
$this->forward404除非($this->getUser()->isAuthenticated());
$this->form=newchangePasswordForm();
$this->bSuccess=false;
如果($request->isMethod('post')){
$this->form->bind($request->getParameter($this->form->getName());
如果($this->form->isValid()){
$this->oUser=$this->getUser();
$this->oUser->setPassword($this->form->getValue('password');
$this->bSuccess=true;
}
}
}
class ChangePasswordForm扩展了BaseForm{
公共函数配置(){
$this->setWidgets(数组(
'current_password'=>new sfWidgetFormInputPassword(数组(),数组('class'=>'b-input-text')),
'password'=>新的sfWidgetFormInputPassword(数组(),数组('class'=>'b-input-text')),
“再次输入密码”=>新的sfWidgetFormInputPassword(array(),array('class'=>“b-input-text”),
));
$this->validatorSchema['current_password']=新的slValidatorUserPassword(
数组('required'=>true,
“最小长度”=>6,
“最大长度”=>128
)
);
$this->validatorSchema['password']=新的sfValidatorString(
排列(
“必需”=>true,
“最小长度”=>6,
“最大长度”=>128
)
);
$this->validatorSchema['password\u再次']=新的sfValidatorString(
数组('required'=>true,
“最小长度”=>6,
“最大长度”=>128
)
);
$this->mergePostValidator(新的sfValidatorSchemaCompare('password','==','password_',array(),array());
$this->widgetSchema->setNameFormat('change_password[%s]”);
}
}

您可以使用提供的sfGuardChangeUserPasswordForm类。它包含在插件中

以下是一个工作控制器示例:

public function executeIndex(sfWebRequest $request)
{
    $sf_user = $this->getUser();
    $sf_guard_user = $sf_user->getGuardUser();
    $this->form = new sfGuardChangeUserPasswordForm($sf_guard_user);

    if ("changepassword" == $request->getParameter('do'))
    { /* dont forget to put action="/route/to/this/controler/?do=changepassword" on the view's <form> */ 
        $this->processForm($request, $this->form);
    }
}

protected function processForm(sfWebRequest $request, sfForm $form)
{
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {
        $notice = 'Password updated successfully.';

        try {
            $sf_guard_user = $form->save();
        } catch (Doctrine_Validator_Exception $e) {

            $errorStack = $form->getObject()->getErrorStack();

            $message = get_class($form->getObject()) . ' has ' . count($errorStack) . " field" . (count($errorStack) > 1 ? 's' : null) . " with validation errors: ";
            foreach ($errorStack as $field => $errors)
            {
                $message .= "$field (" . implode(", ", $errors) . "), ";
            }
            $message = trim($message, ', ');

            $this->getUser()->setFlash('error', $message);
            return sfView::SUCCESS;
        }

        $this->dispatcher->notify(new sfEvent($this, 'admin.save_object', array('object' => $sf_guard_user)));

        $this->getUser()->setFlash('notice', $notice);

        $this->redirect(array('sf_route' => 'sf_guard_user_profile'));
    }
    else
    {
        $this->getUser()->setFlash('error', 'Password was not changed due to some errors.', false);
    }
}
公共函数执行索引(sfWebRequest$request)
{
$sf_user=$this->getUser();
$sf_guard_user=$sf_user->getGuardUser();
$this->form=new-sfGuardChangeUserPasswordForm($sf\u-guard\u-user);
如果(“更改密码”=$request->getParameter('do'))
{/*别忘了在视图的*上放置action=“/route/to/this/controler/?do=changepassword”/
$this->processForm($request,$this->form);
}
}
受保护的函数processForm(sfWebRequest$request,sfForm$form)
{
$form->bind($request->getParameter($form->getName()),$request->getFiles($form->getName());
如果($form->isValid())
{
$notice='密码已成功更新';
试一试{
$sf_guard_user=$form->save();
}捕获(条令\验证程序\异常$e){
$errorStack=$form->getObject()->getErrorStack();
$message=get_class($form->getObject()).“has”.count($errorStack)。“field”。(count($errorStack)>1?:空)。”带有验证错误:“;
foreach($errorStack as$field=>$errors)
{
$message.=“$field(“.infrade”(“,”,$errors)。”;
}
$message=trim($message,“,”);
$this->getUser()->setFlash('error',$message);
返回sfView::成功;
}
$this->dispatcher->notify(新sfEvent($this,'admin.save_object',array('object'=>$sf_guard_user));
$this->getUser()->setFlash('notice',$notice);
$this->redirect(数组('sf\u route'=>'sf\u guard\u user\u profile');
}
其他的
{
$this->getUser()->setFlash('error','Password未因某些错误而更改',false);
}
}

您使用的是内置密码系统还是自定义密码系统?我们可以看到生成的html表单吗?处理表单的操作?添加操作。是的,海关行动。ChangePasswordForm扩展了BaseForm。您也可以添加
ChangePasswordForm
类吗?更新ChangePasswordForm对我来说一切都很好,那么显示表单的模板呢?