模型代码,定义一个专用来重置密码的模型,和登录模型是一个道理
<?php namespace app\models; use yii\base\Model; use app\models\User; use yii\helpers\VarDumper; class ResetpwdForm extends Model{ public $password; public $password_repeat; public function rules(){ return [ ['password', 'required'], ['password', 'string', 'min' => 4], ['password_repeat','compare','compareAttribute'=>'password','message'=>'两次输入的密码不一致!'], ]; } public function attributeLabels(){ return [ 'password' => '密码', 'password_repeat'=>'重复密码', ]; } /** * @return User|null the saved model or null if saving fails */ public function resetPassword($id){ if (!$this->validate()) { return null; } $u = User::findOne($id); $u->setPassword($this->password); $u->removePasswordResetToken(); return $u->save() ? true : false; } }
视图就是两个输入框了
<?php use yii\helpers\Html; use yii\bootstrap\ActiveForm; $this->title = '重置密码'; ?> <div class="row"> <h1><?= Html::encode($this->title) ?></h1> <div class="col-md-6"> <?php $form = ActiveForm::begin(); ?> <?= $form->field($model, 'password')->passwordInput(['maxlength' => true]) ?> <?= $form->field($model, 'password_repeat')->passwordInput(['maxlength' => true]) ?> <div class="form-group"> <?= Html::submitButton('确认重置', ['class' =>'btn btn-success']) ?> </div> <?php ActiveForm::end(); ?> </div> </div>
然后在后台控制器中去写个动作(action)
public function actionRsetpswd($id) { // 这里可以加一些权限检测的代码。 if( empty($id)){ return $this->goBack(); } $model = new ResetpwdForm(); if ($model->load(Yii::$app->request->post())) { if($model->resetPassword($id)) { return $this->render('msg', ['msg'=>'密码重置成功']); } } // 这里注意调用的是 上面的 视图文件名 resetpwd.php return $this->render('resetpwd', ['model' => $model,]); }
这就很简单的能把用户的密码重置了,修改下视图和控制器,也能让用户很简单的修改自己的密码,而不是去给邮箱发个重置连接,当然重置连接是用于忘记密码,用邮箱来验证身份的。