我有表单,其中一些字段看起来像行,所以我可以使用JS添加/删除它们。 例如:
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" />
默认创建的新行(允许向现有行添加一行)
<input id="id[n0]" type="text" name="id[n0]" value="" />
<input id="name[n0]" type="text" name="name[n0]" value="" />
JS创建的新行
<input id="id[n1]" type="text" name="id[n1]" value="" />
<input id="name[n1]" type="text" name="name[n1]" value="" />
因此,我们将继续表格,我们将知道要更新的行和要添加的内容(如果索引以“n”开头 - new,如果index是数字 - 现有元素)。
我尝试了子表单...但是我是否必须为每个字段创建子表单?如果我使用以下代码:
$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)其他解决方案?
感谢。
答案 0 :(得分: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' => ...]]
值的数组