在Yii中以单一形式验证两个模型

时间:2012-01-25 10:29:45

标签: php yii

我有两个数据库,第一个用于Group,第二个用于Member。现在我想以单一形式验证这两个模型,我的组控制器文件就像这样

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,
    ));
  }

那么如何在这里验证两种模型。

3 个答案:

答案 0 :(得分:0)

您可以使用

  $model->validate()

检查模型是否有效的方法

答案 1 :(得分: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()时,表单类本身将创建组和成员对象,它只是验证validate()中的两个类。它的save()方法看起来就像你上面做的那样。

答案 2 :(得分:0)

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

if($valid)
{
    //your code
}

它将验证两种模型。