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()。