0

我有窗體,其中一些字段看起來像行,所以我可以使用JS添加/刪除它們。 例如:Zend Framework,Zend_Form_Element如何設置自定義名稱?

場與ID = 1(現有的行)

<input id="id[1]" type="text" name="id[1]" value="1" /> 
<input id="name[1]" type="text" name="name[1]" value="100" /> 

場與ID = 2(現有行)由創建

<input id="name[2]" type="text" name="name[2]" value="200" /> 
<input id="name[2]" type="text" name="name[2]" value="200" /> 

新行默認(允許向現有行添加一行)

通過JS

<input id="id[n1]" type="text" name="id[n1]" value="" /> 
<input id="name[n1]" type="text" name="name[n1]" value="" /> 

創建

<input id="id[n0]" type="text" name="id[n0]" value="" /> 
<input id="name[n0]" type="text" name="name[n0]" value="" /> 

新行所以比我們將繼續表格,我們會知道更新哪些行,並添加什麼(如果指數以「N」開始 - 新的,如果索引是數字 - 存在的元素)。

我試過子表單...但我必須爲每個字段創建子表單嗎?如果我使用以下代碼:

$subForm = new Zend_Form_SubForm(); 
$subForm->addElement('Text', 'n0'); 
$this->addSubForm($subForm, 'pid');  
$subForm = new Zend_Form_SubForm(); 
$subForm->addElement('Text', 'n0'); 
$this->addSubForm($subForm, 'name'); 

這是什麼最好的方法?

1)使用子窗體?

2)擴展Zend/Form/Decorator/ViewHelper.php使用名稱name[nX]

3)其他解決方案?

謝謝。

回答

2

另一種方法是創建一個包含所有字段的單個子表單,然後將這些子表單的數組添加到主表單中。這是我使用的代碼:

 foreach ($value as $id => $row) { 

       $subForm = clone $origSubForm; 

       $name = 'multi[' . $id . ']'; 
       $subForm->setElementsBelongTo($name); 
       $subForm->setName($name); 
       $subForm->populate($row); 

       $subForms[$id] = $subForm; 
     } 

把這些形式中的數組元素(在本例中命名爲multi)。而不是陣列包含個人$id[]值,你會得到一個數組包含[0 => ['id' => .., ], 'n0' => ['id' => ...]]

+0

謝謝。這是我需要的。 – user281571 2010-04-02 17:09:12

+0

>你不知道找到這些信息有多困難。我認爲主要原因是我搜索的方式。我試圖找出如何爲每個子表單獲取數組。出於絕望,我想我會設置自己的名字並登陸這個頁面。你應該做一個教程!他們是相當罕見的! – 2011-04-20 13:21:20

相關問題