2017-03-13 13 views
0

**Here is the block diagram for question**異なるコントローラからIDを取得する方法Yii2?

モーダルボタンからフォームを作成した後、私はPjaxレンダリングフィールドを持つモデルボタンを持っています。例の画像を追加しました。新しく作成されたIDを取得するにはどうすればよいですか(データベースに追加する選択ではなく、このフォームから取得したIDを取得する必要があります)。 Ajaxのキャッチでこれ、私のPjaxへの転送は、細胞

をレンダリングよりも、私はボタンを取得設定する必要があると思う

は、私がバリエーションを試してみましたが、失敗し、私は完全にそれを実装する方法を理解望めません。誰でもソリューションを手助けできますか?

//TwoController 
public function actionCreate() 
{ 
    $model = new Formtwo(); 

    if ($model->load(Yii::$app->request->post())) { 
     if ($model->save()) { 
      echo 1; 
     //maybe here I must to do query ? 
     } else { 
      echo 0; 
     } 
    } else { 
     return $this->renderAjax('create', [ 
      'model' => $model, 
     ]); 
    } 
} 

インデックスのGridView **Index GridView**

+0

ここでは何を達成しようとしているのかわかりにくいです。 Form1、Form2があります。 Form2インスタンスを作成しようとしていて、保存後に新しく作成したIDをForm1ページに渡しますか? – talki

+0

はい、少し説明すると、新しく作成されたid Form2をForm1セル 'form2_id'に入れる必要があります。またはForm1自体(_form)、またはForm1が作成された後(インデックス内)。主なものは、データベーステーブルForm1にレコードを作成することです。したがって、Form1の作成後、 'form2_id'セルは、Form1に属するForm2(id)(モーダル形式で作成された)の種類を表示します。 –

答えて

0
//TwoController 
public function actionCreate() 
{ 
    $model = new Formtwo(); 

    if ($model->load(Yii::$app->request->post())) { 
     if ($model->save()) { 
      echo $model->id; 
     //maybe here I must to do query ? 
     } else { 
      echo 0; 
     } 
    } else { 
     return $this->renderAjax('create', [ 
      'model' => $model, 
     ]); 
    } 
} 

クエリーを必要としません。ちょうど$ model-> idを使ってください。 save()の後に値があります。

アップデートは

あなたがどのコントローラには関係ありません。 save()の後に保存されたモデルのidを取得します。次に、id属性を使用できます。したがって、モーダルフォームをajaxロードで開くことができます。 form2では、スクリプトをajax投稿フォームに登録します。このようなもの:

$("#form :submit").click(function (e) { 
      e.preventDefault(); 
      $.ajax({ 
       method: "POST", 
       url: $("#form").attr("action"), 
       data: $("#form").serialize(), 
       success: function (response) { 
        $("#modalid").modal("hide") 
        $.pjax.reload({ 
         container: "#grid" 
        }); 
        $('#Form2_id').val(response); //here you get the id 
       }, 
      }) 
      return false; 
     }); 
+0

私は、他のコントローラのidよりもどうやって取得できますか? –

+0

さて、私はちょうどグリッドであなたの編集と写真を見ました。最初はフォームで、グリッドで2番目です。グリッド(model1)でモデルを更新する必要がある場合は、そのIDをcontroller2に渡し、model2を保存した後に更新し、pjaxをリロードする必要があります。 – naduvko

0

私は正しいことを理解しました。ユーザーがForm2のインスタンスを作成すると、それがForm1のインスタンスを作成するために転送され、Form2の新しく作成されたレコードのIDがForm1 _formに格納されることを望みます。 私が正しく理解していなかった場合は、より良い説明してください:)

をTwoControllerで作成した後、あなたがOneContrllerのcreateアクションを呼ぶような、アクションを作成します。

if ($model->save()) { 
return \Yii::$app->runAction('/controller/action-name', ['form2_id'=>$model->id]); 

}

をOneController actionCreateに追加デフォルト値のパラメータ:

public function actionCreate($form2_id=null) { 

このパラメータは、ビューに渡されることを確認してくださいeをcreate.phpと_formに渡します。

+0

もし私が正しく理解すれば。 $ form2_id = nullの場合、保存後のrunAction()がForm1 id値をセルform2_idに作成(_form)します。しかし、私はあなたがcreate.php、_form.phpで渡すことを意味するものを理解していませんでした。この1つの$ form2_id = null?私はカップルのバリエーションを試しましたが、失敗しました。データベースで〜2k行を作成するモデルフォーム)そしてif($ model-> save()){echo 1; echo 1を無視する(result == 1){$(\ $ form).trigger( "reset"); $ .pjax.reload({container: '#crtGrid'}); Index GridViewの後にピクチャを追加しました。 –

+0

_formのviewsフォルダーには、ファイルをロードするためにactionCreationから呼び出されるcreateというファイルもあります。_formへの呼び出しは、送られたパラメーターで行います。送信したIDがOneControllerからcreate.phpに、create.phpから_formに渡されていることを確認してください。 – talki

関連する問題