我想使用视图脚本来呈现我的 zend 表单,因为它似乎是在仍然使用 Zend_Elements 类的同时控制表单布局/设计的最佳方式。
在视图脚本中,我使用$this->element->getElement('elementName')
.
我对元素的名称有疑问。这实际上是一个表单里面的一个子表单里面的一个子表单。
当我使用 FormElements 装饰器时,元素的完全限定名称是 form[subForm][subForm][element] ,这很好。Wehn 我移到 viewScript 装饰器,它更改为 subForm[subForm][element]。
我知道我需要使用 PrepareElements 装饰器来解决这个问题,但这导致名称更改 form[subForm][form][subForm][subForm][elements] (它在开始时将前两个名称翻了一番)。
任何想法我应该如何处理这个?
谢谢。
更新:我试图调试 PrepareElements,但我真的不明白在做什么。似乎它在第一次迭代中工作正常,但随后在其中一个中间子表单上运行时再次添加了 form[subform] 前缀。
当我不使用 PrepareElements 装饰器时,我只是缺少名称中的“form”前缀(即,我只得到 subForm[element],而不是 form[subForm][element])。
也许我可以以某种方式解决这个问题?
我试图改变belongsTo,但只替换了“subForm”前缀。
实际上,似乎缺少的是 subForm 上的 belongsTo 方法。
同样,这都是因为 ViewScript 装饰器。它适用于 FormElements 装饰器。
更新 2:澄清一下,我不介意这个名称更改,但是当我调用 form->populate 时,它会导致我的字段不填充。
编辑:我认为我已经将问题缩小到这个:当我在 setDefaults 中取回我的值时,它们的顺序如下:
array(
\"formElements1-name\" => value1... \"subFormName\" => array(
\"parentFormName\" => array(
\"subFormName\" => subForm-values-array
)
)
...这里的主要问题是"parentFormName" => "subFormNAme"..
它会重复什么?我已经是主要形式了。我猜这是因为我设置了setElementsBelongTo(formName[subFormName])
,但如果我不这样做,那么我的子表单值将与表单完全分开,
即值数组=数组(\“formName\”=>数组(formValues),\“subFormNAme\”=>数组(subFormValues)
, 虽然我希望它是
array(
formName => array(
subFormNAme => values-array
)
)...
甚至有可能完成这项工作吗?