2012-01-25 6 views
0

私は2つのデータベースを持っています.1つ目はグループ、もう1つはメンバーです。今私は、単一の形で両方のモデルを検証したいと私のグループのコントローラファイルは、どのように、ここで両方のモデルを検証するために、この両方のモデルを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を拡張するクラスを作成することができない場合

0

かを確認するために

 
    $model->validate() 

メソッドを使用することができます。これはあなたのコントローラコードをシンプルで清潔に保ちます。デフォルトのコンストラクタで作成できることを確認してください。

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()メソッドは上記のようになります。

+0

実際に最初のモデルを有効にしていますが、2番目のモデルは検証を行っていません。 – NewUser

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

if($valid) 
{ 
    //your code 
} 

両方のモデルを検証します。

関連する問題