我是Yii框架的新手,所以我试图理解它的工作方式。 我有一个用户创建表单的以下验证规则,现在我需要检查afterValidation()方法,如果所有验证规则都已通过哈希用户密码。我不知道的是,如果Yii有一个内置方法,如果验证规则已经通过,则返回true或false。
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('email, password, username', 'required'),
array('email, username, password', 'length', 'max'=>256),
array('email, username', 'unique'),
array('password', 'compare'),
array('password_repeat', 'safe'),
);
}
protected function afterValidate()
{
parent::afterValidate();
if("VALIDATION RULES HAVE PASSED, ther is no error message")
{
$this->password = $this->encrypt($this->password);
}
}
public function encrypt($value)
{
return md5($value);
}
答案 0 :(得分:2)
您应该使用的方法是$this->hasErrors(),因为您已经执行了表单验证。嵌套错误的可能原因是由于它在每个afterValidate()
之后调用了$this->validate()
,因为我认为如果执行验证会自动调用它,并且您最终会得到一个无限循环
答案 1 :(得分:1)
相反,如果在afterValidate()
中放置任何在验证周期中运行的内容,我认为您希望将代码放在beforeSave()
中。
beforeSave()
。
作为奖励:如果您只是在做标准密码,请考虑使用Yii Password behavior。它将为您节省大量时间,并且已经被一些最好的Yii程序员彻底检查过了。