2016-05-29 13:18:54 3997次浏览 2条回答 2 悬赏 10 金钱

控制器

public function actionPassword()
    {
        $model = new PasswordForm;
        $request = Yii::$app->request;
        $res=$model->load(Yii::$app->request->post());

        var_dump($res);
        if($request->isPost && $model->load(Yii::$app->request->post()) && $model->changePassword())
        {
            //echo "123";
            Yii::$app->user->logout();
            return $this->goHome();
        }else{
            return $this->render('modify-password',['model'=>$model]);
        }
    }

model

<?php
namespace frontend\models;

use Yii;
use yii\base\model;
use common\models\User;

class PasswordForm extends model
{
	public $password;
	public $pass1;
	public $pass2;

	public static function tableName()
    {
        return 'user';
    }
	
	public function changePassword()
	{

		$id = Yii::$app->user->id;
		$admin=  User::findIdentity($id);
		$password = $admin->password_hash;
		if(Yii::$app->getSecurity()->validatePassword($this->password, $password)){
			if($this->pass1 == $this->pass2){
				$newPass = Yii::$app->getSecurity()->generatePasswordHash($this->pass1);
				$admin->password_hash = $newPass;
				if($admin->save()){
					return true;
				}else{
					return false;
				}
			}else{
				Yii::$app->session->setFlash('contact','两次新密码不相等');
				return false;
			}
		}else{
			Yii::$app->session->setFlash('contact','旧密码错误');
			return false;
		}

	}
	
}

视图

<?= Html::beginForm(['password'], 'post', ['enctype' => 'multipart/form-data']) ?>
									<div class="pass">
										<p class="pass-box">
											<img src="<?=$baseUrl?>images/srmm.png"  />
											<!--<input type="password" name="old" placeholder="输入旧密码…" />-->
											<?=Html::input('password','model[password]','',['placeholder'=>'输入旧密码…']) ?>	
										</p>
										<!--<span>旧密码错误</span>-->
									</div>
									<div class="pass">
										<p class="pass-box">
											<img src="<?=$baseUrl?>images/srmm.png"  />
											<!--<input type="password" name="new" placeholder="输入新密码…" />-->
											<?=Html::input('password','model[pass1]','',['placeholder'=>'输入新密码…']) ?>	
										</p>
										<!--<span>新密码不符合</span>-->
									</div>
									<div class="pass">
										<p class="pass-box">
											<img src="<?=$baseUrl?>images/srmm.png"  />
											<!--<input type="password" name="old" placeholder="再次输入新密码…" />-->
											<?=Html::input('password','model[pass2]','',['placeholder'=>'输入新密码…']) ?>	
										</p>
										<!--<span>2次密码输入不一致</span>-->
									</div>	
							</div>
							<p class="btn">
								<!--<button>保 存</button>-->
								<?=Html::submitButton('保 存')?>
							</p>
						</div>
						<?= Html::endForm() ?>

最佳答案

  • 花椒 发布于 2016-05-30 08:06 举报

    PasswordForm 中增加下面规则:

    ``

    public function rules()
    {
        return [
            [['password', 'pass1','pass2','其他属性也都加进来'], 'safe'],
        ];
    }
    
    3 条回复
    回复于 2016-05-30 11:23 回复

    不行,load还是false

    回复于 2016-05-30 11:57 回复

    input控件名字改成:PasswordForm[password],包括pass1。。。。

    回复于 2016-05-30 15:53 回复

    这次对了,之前是视图改对了,model没加rules方法。最后,谢谢。

  • 回答于 2016-06-03 08:41 举报

    如果用了load, 建议在Form中使用 Html::activeTextInput 之类的方法

您需要登录后才可以回答。登录 | 立即注册
lihuan3535
助理

lihuan3535

注册时间:2015-08-16
最后登录:2016-08-19
在线时长:9小时35分
  • 粉丝0
  • 金钱15
  • 威望0
  • 积分105

热门问题