Php Yii框架2.0$型号->;验证总是返回true
我是yii2框架的新手。我不明白我在哪里犯了错误。下面是我的代码Php Yii框架2.0$型号->;验证总是返回true,php,postgresql,yii2,Php,Postgresql,Yii2,我是yii2框架的新手。我不明白我在哪里犯了错误。下面是我的代码 public function rules() { return [ // username and password are both required [['oldpassword', 'newpassword','reenternewpassword'], 'required'], // rememberMe must be a
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,但是model validate函数返回true。如何返回?请帮助我。为什么不这样做,因为validatePassword()是检查值为true或false的方法
public function actionChangepwd()
{
if($model->load(Yii::$app->request->post()))
{
if($model->validatePassword()){
echo 'pwd correct';
}
else
{
echo 'pwd incorrect';
}
}
}
将函数
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');
}
}
顺便说一句,您不检查用户是否存在,这可能会在此验证器中引发异常。请记住检查是否找到用户!