Zend Framework,Zend_Form_Element如何设置自定义名称?

发布于 2024-08-28 05:26:05 字数 1330 浏览 7 评论 0原文

我有表单,其中一些字段看起来像行,所以我可以使用 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”开头 - 新的,如果索引是数字 - 现有元素)。

我尝试了子表单...但是我必须为每个字段创建子表单吗?如果我使用以下代码:

$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)其他解决方案?

谢谢。

I have form, where some fields are looks like rows, so I can add/delete them using JS.
For example:

Field with ID=1 (existing row)

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

Field with ID=2 (existing row)

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

new row created by default (to allow add one more row to existing rows)

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

new row created by JS

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

So than we will proceed form, we will know what rows to update and what to add (if index starts with "n" - new, if index is number - existent element).

I tried subforms... but do I have to create subform for each field? If I use following code:

$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');

What is the best way for this?

1) Use subforms?

2) Extend Zend/Form/Decorator/ViewHelper.php to use names like name[nX]?

3) Other solutions?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

暮色兮凉城 2024-09-04 05:26:05

另一种方法是创建一个包含所有字段的子表单,然后将这些子表单的数组添加到主表单中。这是我使用的代码:

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

                $subForm = clone $origSubForm;

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

                $subForms[$id] = $subForm;
        }

将这些表单放入数组元素中(在本例中名为 multi)。您得到的是一个包含 [0 => 的数组,而不是包含各个 $id[] 值的数组。 ['id'=> .., ], 'n0' => ['id'=> ...]]

The alternative is to create a single sub form with all the fields in place and then add an array of these sub forms to your main form. This is the code I use for that:

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

                $subForm = clone $origSubForm;

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

                $subForms[$id] = $subForm;
        }

Put these forms in an array element (in this example named multi). Instead of arrays containing the individual $id[] values you get one array containing [0 => ['id' => .., ], 'n0' => ['id' => ...]]

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文