我得到的解決方案,但從這裏和其他論壇的所有幫助。我遵循Kiran的post,並通過使用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中有兩組行,因此我將「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);
}
這樣一來,我可以對從瀏覽器和用戶即時將添加按保存保存所有數據或提交按鈕只有一次子行的正數。
感謝大家的支持。
問候,
費薩爾
感謝Asgaroth您的輸入。我試圖實施它,但面臨一些問題。首先,$ item-> validate()拋出錯誤,儘管$ model-> validate起作用。當我提交表單時,我不會將所有行重新存入模型中,以便迭代以實現所需的功能。不過,我現在正在嘗試Kiran [鏈接] http://www.yiiframework.com/forum/index建議的解決方案。php/topic/36463-receiving-multiple-records-for-a-single-model-from-view-in-post-method-to-save-parent-child-data/page__pid__175562#entry175562 [link]並將回覆與更新。 – FaisalKhan