繁体   English   中英

Yii Framework 2.0 $ model-> validate始终返回true

[英]Yii Framework 2.0 $model->validate always returns true

我是yii2框架的新手,我不明白我在哪里做错了,下面是我的代码。

public function rules()
    {
        return [
            // username and password are both required
            [['oldpassword', 'newpassword','reenternewpassword'], 'required'],
            // rememberMe must be a boolean value
            ['reenternewpassword', 'compare','compareAttribute'=>'newpassword'],
            // password is validated by validatePassword()
            ['oldpassword', 'validatePassword'],
        ];
    }

public function validatePassword()
    {

        $this->password_hash= User::findOne(['username'=>Yii::$app->user->identity->username,'status'=> User::STATUS_ACTIVE])->password_hash;
        if(is_null($this->oldpassword))
            return false;
        return Yii::$app->getSecurity()->validatePassword($this->oldpassword, $this->password_hash);
    }

模型:

public function actionChangepwd()
{
if($model->load(Yii::$app->request->post()))
        {
            if($model->validate()){
             echo 'pwd correct';
            }
            else
            {
             echo 'pwd incorrect';
            }
        }
}

在这里validatePassword返回false,但是模型validate函数返回true。如何?请帮助我。

将功能validatePassword修改为:

public function validatePassword($attribute)
        {

            $this->password_hash= User::findOne([
                 'username' => Yii::$app->user->identity->username,
                 'status'=> User::STATUS_ACTIVE
                ])->password_hash;
            if(is_null($this->oldpassword)) {
                    $this->addError($attribute, \Yii::t('app', 'Wrong message');
            }
            if(!Yii::$app->getSecurity()->validatePassword($this->oldpassword, $this->password_hash)) {
                    $this->addError($attribute, \Yii::t('app', 'Wrong message');
            } 
        }

顺便说一句,您不检查用户是否存在,它可以在此验证器中引发Exception。

您为什么不这样做,因为validatePassword()是检查值是true还是false的方法,

public function actionChangepwd()
{
if($model->load(Yii::$app->request->post()))
        {
            if($model->validatePassword()){
             echo 'pwd correct';
            }
            else
            {
             echo 'pwd incorrect';
            }
        }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM