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

相关问题