1
假设我有一个模型项目,owner_id代表项目的所有者。创建新项目时,用户需要输入所有者的名称而不是id。我编写了一个验证方法来确保用户确实存在于系统中,然后我可以获取用户的ID。规则是:如何在调用保存在CActiveRecord中的方法之前验证属性?
array('owner_name', 'userValidation')
但我发现,验证,只有当下面的语句执行
$model->save()
这意味着所谓的,如果我试图得到一个用户的ID没有在系统之前的保存与陈述
$model->validate();
$user=User::model()->findByAttributes(array('username'=>$model->owner_name));
$model->owner_id=$user->id;
会有例外。所以我的问题是为什么当我调用validate()方法时验证不能按预期工作?我已经检查方法的源代码保存在Yii中
public function save($runValidation=true,$attributes=null)
{
if(!$runValidation || $this->validate($attributes))
return $this->getIsNewRecord() ? $this->insert($attributes) : $this->update($attributes);
else
return false;
}
我想这也尝试通过电话验证的validate()。