2011-12-17 57 views
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()。

回答

2

您没有检查validate()的返回值。试试这样的:

if ($model->validate()) { 
    $user=User::model()->findByAttributes(array('username'=>$model->owner_name)); 
    $model->owner_id=$user->id; 
    /// ... 
} else { 
    // handle the case that userValidation failed 
} 
相关问题