通常,用户登录后修改自己的密码时都要求输入正在使用的密码。因此这次我们不能重用刚刚的 Form_UserLogin 表单了,需要单独建立一个。
修改 users 控制器,加入下列代码:
function actionChangePassword(){ if (request_is_post()){ $oldpass=request('oldpass'); $newpass=request('newpass'); $newpass_repeat=request('newpass_repeat'); //验证 do { $errors=array(); //新密码 if (strlen($newpass)<6){ $errors['newpass'][]='新密码长度不能小于6位'; } if ($newpass!=$newpass_repeat){ $errors['newpass'][]='新密码两次输入不一致'; } //旧密码 //1.获得登录用户 $user=User::validateLogin($this->_login_user['username'], $oldpass); if ($user===false){ $errors['oldpass'][]='旧密码输入不正确'; } if (count($errors)){ $this->_view['errors']=$errors; break; } //保存新密码 $user->changePassword($newpass); //跳转到首页 return $this->_redirectMessage('恭喜您', '修改密码成功', url('default/index')); }while (0); } }
创建View文件 _code/view/changepasswd.php,内容为:
<div> <form name="form_user" id="form_user" action="<?php echo url('users/changePassword'); ?>" method="post"> <fieldset> <p> <label for="oldpass">旧密码</label> <input type="password" name="oldpass" id="oldpass" /> <?php if (@count($errors['oldpass'])){echo implode(',', $errors['oldpass']);}?> </p> <p> <label for="newpass">新密码</label> <input type="password" name="newpass" id="newpass" /> <?php if (@count($errors['newpass'])){echo implode(',', $errors['newpass']);}?> </p> <p> <label for="newpass_repeat">再次输入新密码</label> <input type="password" name="newpass_repeat" id="newpass_repeat" /> <?php if (@count($errors['newpass_repeat'])){echo implode(',', $errors['newpass_repeat']);}?> </p> <p> <input type="submit" name="Submit" value="提交" /> </p> </fieldset> </form> </div>
这次的表单对象复杂了许多。除了要为三个密码输入字段指定验
actionChangePasswd() 中,我们使用 changePassword() 方法来修改密码。
输入了错误的密码
注意这次在重定向浏览器时调用的是 _redirectMessage() 方法。这个方法会通过 redirect_message 视图来显示提示信息,能够让用户注意到操作的结果。如果有必要,可以将注册、登录等方法的重定向操作也改为使用带提示信息的重定向。
成功修改密码后的提示信息
现在用户方面的功能就基本上实现完了。下一节开始,我们将实现任务的管理功能。