模型代码,定义一个专用来重置密码的模型,和登录模型是一个道理

<?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,]);
    }

这就很简单的能把用户的密码重置了,修改下视图和控制器,也能让用户很简单的修改自己的密码,而不是去给邮箱发个重置连接,当然重置连接是用于忘记密码,用邮箱来验证身份的。