如何从 ZF2 中子实体的字段集中调用单个表单元素

Posted

技术标签:

【中文标题】如何从 ZF2 中子实体的字段集中调用单个表单元素【英文标题】:How to call individual form elements from the fieldset of a child entity in ZF2 【发布时间】:2014-04-05 22:24:39 【问题描述】:

在视图脚本中,从字段集中调用表单元素的语法类似于:

echo $this->formRow($form->get('member')->get('firstName'));

此脚本从字段集 member 中调用单个元素 firstName。但是,如果字段集元素引用关联字段集实体的别名,则此脚本将调用子表中的所有元素。从子表中调用单个元素的语法是什么?

换句话说,假设我们有一个members 实体和一个members 字段集,其中包含firstNamelastName 等元素。我们还有一个address 实体和一个address 字段集,其中包括addresscitystatezipcode 等元素。对于 ORM 关联,​​members 实体包括一个addressInfo 元素,该元素建立到address 实体的链接,address 实体包括一个memberItem 元素,它建立到members 实体的链接.在这种情况下,

echo $this->formRow($form->get('member')->get('firstName'));

在视图脚本中生成单个 firstName 表单元素,而

echo $this->formRow($form->get('member')->get(‘addressInfo’));

addresscitystatezipcode 生成表单元素。

我假设如果我们只想为city 生成一个表单元素,那么脚本可能需要类似于

echo $this->formRow($form->get('member')->get(‘addressInfo’)->get(‘city’));

echo $this->formRow($form->get('member')->get(‘addressInfo’, ‘city’));

但这些都不起作用。

语法是什么?

【问题讨论】:

【参考方案1】:

分解一下,你想要以下...

$member      = $form->get('member');
$addressInfo = $member->get('addressInfo');
$city        = $addressInfo->get('city');

echo $this->formRow($city);

将调用链接在一起,你最终得到了这个

echo $this->formRow($form->get('member')->get('addressInfo')->get('city'));

【讨论】:

我认为这可行,但它给出了 Zend\Form\Exception\InvalidElementException 错误:No element by the name of [city] found in form【参考方案2】:

由于addressInfo元素是一个集合,所以在识别“字段”之前,需要先识别集合的“行”。因此,

$member           = $form->get('member');
$addressFieldsets = $member->get('addressInfo');
$addressInfo      = $addressFieldsets[0];
$city             = $addressInfo->get('city');

echo $this->formRow($city);

【讨论】:

以上是关于如何从 ZF2 中子实体的字段集中调用单个表单元素的主要内容,如果未能解决你的问题,请参考以下文章

如何将 ZF2 单元/应用程序模块测试合并到单个调用中?

如何使用条件关联建立 ZF2 学说实体

检索表单时更改 ZF2 表单行为

如何使用ZF2中的数组表单设置使字段验证依赖于另一个字段?

Django:如何更改内联表单集中的字段小部件

如何从 Java 中的 HttpResponse 中获取单个表单字段并将其写入文件?