私は解決策を得ましたが、ここや他のフォーラムからのすべての助けを借りて. Kiranの投稿に従い、 jQuery を使用して追加の HTML 属性を生成してテストしました。送信時に、すべての行を希望どおりに正確に取得しました。コントローラーでは、最初にポスト リクエストで送信されたモデルの総数をカウントし、次に目的の処理のために各モデルを反復処理しました。以下はコード スニペットです。
if(!empty($_POST))
{
$v=count($_POST['Address'])+1;
Yii::log(count($_POST['Address']));
for ($i=1; $i<$v; $i++){
$addressModel_1->attributes=$_POST['Address'][$i];
Yii::log('Dumping Data from '.$i.' model');
Yii::log($addressModel_1->city);
Yii::log($addressModel_1->street);
Yii::log($addressModel_1->state);}}
ビュー側では、jQuery 関数を使用して HTML を生成しました。この関数は、ユーザーがデータを入力できるように別の html セットを追加するだけでした。HTML を生成する際に注意すべき重要なことは、モデルの名前です。そうしないと、コントローラーの目的の場所に着陸しません。
以下は、この関数のコード スニペットです。DOM には既に 2 セットの行があるため、「3」を id としてハードコーディングしていることに注意してください。このコードをさらに改善する予定ですが、ロジックは機能しますのでご安心ください。
function createNewAddress(){
var newdiv = document.createElement('div');
var inner_html='<div class="row">';
inner_html+='<label for="Address_3_street">Street</label> <input name="Address[3][street]" id="Address_3_street" type="text" maxlength="200" /> </div>';
inner_html+='<div class="row">';
inner_html+='<label for="Address_3_city">City</label> <input name="Address[3][city]" id="Address_3_city" type="text" maxlength="200" /> </div> ';
inner_html+='<div class="row">';
inner_html+='<label for="Address_3_state">State</label> <input name="Address[3][state]" id="Address_3_state" type="text" maxlength="200" /> </div>';
newdiv.innerHTML=inner_html;
$('#user-form').append(newdiv);
}
このようにして、ブラウザからオンザフライで n 個の子行を追加でき、ユーザーは [保存] または [送信] ボタンを 1 回だけ押すだけですべてのデータを保存できます。
皆さんのサポートに感謝します。
よろしく、
ファイサル