我大部分时间都在谷歌上搜索,试图找到答案,但我终于承认失败了。
我正在处理 Zend Framework 中的一个表单,该表单需要能够处理可变数据长度。我有一个包含一些通用字段的表单,这些字段指定了一些很容易处理的通用参数(项目名称、语言等),但我还有一个名为 parameters 的子表单,它包含可变数量的键/值巢穴让您将泛型参数添加到数据中。示范表格如下:
<form>
<input type="text" name="item_name" />
<input type="text" name="item_lang" />
<!-- etc -->
<input type="text" name="parameters[1][key]" />
<input type="text" name="parameters[1][value]" />
<input type="text" name="parameters[2][key]" />
<input type="text" name="parameters[2][value]" />
<input type="text" name="parameters[3][key]" />
<input type="text" name="parameters[3][value]" />
<input type="text" name="parameters[4][key]" />
<input type="text" name="parameters[4][value]" />
<!-- and so on -->
</form>
注意:以上是对实际形式的大量简化。它也是手动构建的,而不是由 zend_form 生成的。
参数的数量可以不同,并且可以使用 javascript 在客户端进行处理,但是当我从预先存在的数据中填充表单以进行更新时,我真的很难初始化表单。
我可能每个项目存储 2 个参数,我可能有 20 个,我可能根本没有。所以我需要表单有 2 个或 20 个或没有参数输入,具体取决于数据的初始状态。不幸的是,数据在 init () 中不可用,因为在您调用 setDefaults () 之前它不在表单中。
这意味着我不能对表单的初始状态执行 foreach() 来为现有数据生成适当数量的输入框。
我确定我一定遗漏了一些明显的东西,但是 Zend 文档非常可怕,我找不到这个用例的任何示例。在 zend_form 中不支持它肯定不会那么罕见。如何在允许表单的初始状态可变的状态下生成表单?
ETA:我表单上的 init() 方法看起来像这样(简化以匹配示例):
public function init ()
{
parent::init ();
$this -> addElement ('text', 'item_name');
$this -> addElement ('text', 'item_lang');
$this -> addSubForm (new Zend_Form_SubForm (), 'parameters');
foreach ($phantom_data as $key => $val)
{
$params = new Zend_Form_SubForm ();
$params -> addElement ('text', 'key');
$params -> addElement ('text', 'value');
$this -> parameters -> addSubForm ($params, $key);
}
}