我有两个数据库,第一个用于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,
));
}
那么如何在这里验证两种模型。
答案 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
}
它将验证两种模型。