2012-01-25 41 views
0

我有兩個數據庫,第一個是Group,第二個是Member。現在我想驗證這兩種模式在一個單一的形式和我的羣控制器,文件是這樣的驗證Yii中的兩種模型

public function actionCreate() 
    { 
    $model=new Group; 
    $member=new Member; 

    // Uncomment the following line if AJAX validation is needed 
    // $this->performAjaxValidation($model); 

    if(isset($_POST['Group'],$_POST['Member'])) 
    { 
     $model->attributes=$_POST['Group']; 
     //$member->attributes=$_POST['Member']; 
     if($model->save()) 
     { 
     $member->attributes=$_POST['Member']; 
     $member->group_id = $model->id; 
     if($member->save()) 
     { 
      $this->redirect(array('view','id'=>$model->id)); 
     } 
     } 
     $this->redirect(array('view','id'=>$model->id)); 
    } 

    $this->render('create',array(
     'model'=>$model, 
     'member'=>$member, 
    )); 
    } 

那麼如何讓這裏驗證兩種型號。

+0

你的意思是說你想在保存兩個模型之前驗證兩個模型? – fivedigit

+0

是的我想在保存之前驗證兩個模型。 – NewUser

回答

0

您可以創建擴展CFormModel類。這使您的控制器代碼簡單而乾淨。確保它可以使用默認構造函數創建。然後你在爲組和用戶,驗證它的數據傳遞,然後將其保存,就像這樣:

public function actionCreate() { 
    $form = new CreateGroupForm(); 

    if (isset($_POST['Group'],$_POST['Member'])) { 
     $form->setData($_POST['Group'], $_POST['Member']); 
     if ($form->validate()) { 
      $form->save(); 
     } 
    } 
    ... 
} 

,當你調用setData() Form類本身將創建組和成員對象,它只是驗證這兩個班都在validate()。它的save()方法看起來像你上面所做的。

0

您可以使用

 
    $model->validate() 

方法來檢查模型是否有效

+0

雅它實際上是有效的第一個模型,但第二個模型沒有做任何驗證。 – NewUser

0
$valid = $model1->validate(); 
$valid = $model2->validate() && $valid; 

if($valid) 
{ 
    //your code 
} 

它將驗證兩個模型。