0

YII で登録フォームを開発しています。私のフォームには、Mode1 として登録するか、Mode2 として登録するかを選択する無線オプションがあります。ユーザーがモード 1 を選択した場合、データは table1 に入力するか、table2 に入力する必要があります。YII では、各モデルが 1 つのテーブルを扱います。ここで私のフォームは 2 つのテーブルを扱います。

では、このようなフォームを処理してデータを検証し、YII のテーブルに入力するにはどうすればよいでしょうか?

4

1 に答える 1

3

最も簡単な方法は、フォームのモデルを 1 つ作成することです (同じフィールドがあると仮定しますか?)。このクラスはCFormModelを拡張します(以下の例では、このモデルをGlobalFormModelと呼んでいます) 。

このモデルには、他の 2 つのモデルと同じ属性と、modeと呼ばれる 1 つの新しい属性があります 。フォームが送信されると、コントローラーでどのモードに基づいてフォームを処理し、正しいモデルに対して検証することができますか。

$model = new GlobalFormModel

if(isset($_POST['GlobalFormModel'])){
    $model->attributes = $_POST['GlobalFormModel']; 

    if ($model->mode == 1){
        $newmodel = new FormOne;
        $newmodel->attributes = $model->attributes;
    } else {
         $newmodel = new FormTwo;
         $newmodel->attributes = $model->attributes;
    } 

    ... // validate and save $newmodel
}

$this->render("yourview",array("model"=>$model));

ここで、FormOne は最初のテーブルに関連付けられたモデルであり、FormTwo は 2 番目のテーブルに関連付けられたモデルです。まず、GlobalFormModel (ビューに渡される) の新しいインスタンスを作成します。フォームが送信されたかどうかを確認します (ここで検証するか、2 つのモデルのいずれかを読み込んだ後に検証することができます)。モードを確認し、正しいモデルをロードします。

于 2012-10-30T10:40:02.603 に答える