2012-01-25 91 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 
} 

它将验证两个模型。