在嵌套子表单(Zend 表单)上使用 ViewScript 装饰器 [英] Using ViewScript Decorator on Nested Subforms (Zend Form)

查看:19
本文介绍了在嵌套子表单(Zend 表单)上使用 ViewScript 装饰器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用视图脚本来呈现我的 zend 表单,因为它似乎是最好的方法在仍然使用 Zend_Elements 类的同时控制表单的布局/设计.

I want to use a view script to render my zend form as it seems to be the best way to control the layout/design of the form while still using the Zend_Elements classes.

在视图脚本中,我使用 $this->element->getElement('elementName') 渲染元素.

From the view script, I render the element with $this->element->getElement('elementName') .

元素名称有问题.这实际上是一个表单中的一个子表单中的一个子表单.

I'm having problems with the names of the elements. This is actually a sub-form inside a sub-form inside a form.

当我使用 FormElements 装饰器时,元素的完全限定名称是 form[subForm][subForm][element] ,这很好.Wehn 我移到 viewScript 装饰器,它变成了 subForm[subForm][element].

When I used the FormElements decorators , the fully qualified name of the elements was form[subForm][subForm][element] , which was good. Wehn I moved to the viewScript decorators, it changed to subForm[subForm][element].

我知道我需要使用 PrepareElements 装饰器来解决这个问题,但这导致名称更改 form[subForm][form][subForm][subForm][elements](它在开始时将前两个名称加倍).

I understood that I need to use the PrepareElements decorator to fix this, but this caused the name to change form[subForm][form][subForm][subForm][elements] (it doubled the first two names in the start).

我应该如何处理这个问题有什么想法吗?

Any ideas how I should handle this?

谢谢.

更新:我尝试调试 PrepareElements,但我真的不明白在做什么.看起来它在第一次迭代中工作正常,但是当在其中一个中间子表单上运行时,它再次添​​加了 form[subform] 前缀.

UPDATE: I tried to debug PrepareElements and I really don't understand what is doing. It seems like it works ok in the first iteration, but then it adds again the form[subform] prefix when running on one of the middle subforms.

当我不使用 PrepareElements 装饰器时,我只是在名称中缺少form"前缀(即,我只得到 subForm[element] 而不是 form[subForm][element]).

When I'm not using the PrepareElements decorator, I'm just missing the "form" prefix in the names (i.e., instead of form[subForm][element], I get only subForm[element]).

也许我可以以某种方式解决这个问题?

May be I can just fix this somehow?

我尝试更改belongsTo,但只替换了subForm"前缀.

I tried to change the belongsTo but that only replaced the "subForm" prefix .

实际上似乎缺少子表单上的belongsTo方法.

It actually seems like what is missing is a belongsTo method on the subForm.

同样,这完全是因为 ViewScript 装饰器.它适用于 FormElements 装饰器.

Again, this is all because of the ViewScript decorator. It works fine with the FormElements decorators.

更新 2: 只是为了澄清,我不介意这个名称更改,但是当我调用 form->populate 时它会导致我的字段没有填充.

UPDATE 2: Just to clarify, I wouldn't mind this name change, but it causes my fields to not populate when I call form->populate .

我认为我已经将问题缩小到这一点:当我在 setDefaults 中取回我的值时,它们的顺序如下:

I think that I've narrowed the problem to this: when I get my values back in setDefaults, they are ordered like this:

array(
\"formElements1-name\" => value1... \"subFormName\" => array(
\"parentFormName\" => array(
\"subFormName\" => subForm-values-array
)
)

...这里的主要问题是 "parentFormName" =>subFormNAme".. 它重复了什么?我已经在主要形式了.我猜这是因为我已经设置了 setElementsBelongTo(formName[subFormName]) ,但如果我不这样做,那么我会让我的子表单值与表单完全分开,

... The main problem here is the "parentFormName" => "subFormNAme".. what does it repeat itself? I'm already in the main form. I'm guessing this is caused because I've set the setElementsBelongTo(formName[subFormName]) , but if I wouldn't do that, then I would get my subform values completely separate from the form,

即值数组 = 数组(\"formName\" => 数组(表单值), \"subFormNAme\" => 数组(子窗体值)

i.e. values array = array( \"formName\" => array( formValues ), \"subFormNAme\" => array( subFormValues )

,而我希望它是

array(
formName => array(
subFormNAme => values-array
)
)...

是否有可能完成这项工作?

Is it even possible to make this work?

推荐答案

当前的解决方案是在子窗体上使用 PrepareElements 装饰器,只需进行一项更改 - 删除 PrepareElements 代码中的递归调用.此外,不需要setElementsBelongTo".

The current solution is to use the PrepareElements decorator on the subforms with one change - remove the recursive call in the PrepareElements code. Also, no "setElementsBelongTo" is required.

这似乎生成了正确的名称和 ID.

This seem to generate the correct names and ids.

这篇关于在嵌套子表单(Zend 表单)上使用 ViewScript 装饰器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆