我有两个实体参与此问题。用户可以拥有与其绑定多个设备的事件。我需要一个表单,用户可以在该特定事件中为该设备输入数小时和roi。在这种情况下,设备实际上是在两个其他实体(设备和事件)中间的实体,以创建具有额外参数的多对多。所以设备有'小时'和'roi'字段。我想让我的表格为活动中的每件设备动态添加一个小时和roi的字段。我可以接受这一部分。我遇到问题的部分是将元素添加到表单中。我一直在寻找帮助我的页面:Zend_Form - Array based elements?。
然而,在那个问题上,他们似乎并没有做我想做的事情。
这就是我现在所拥有的:
foreach ($event['equipment'] as $equipment)
{
$form->addElement('text', 'roi', array(
'label' => $equipment['equipment']['model'] . ' ROI',
'required' => true,
'belongsTo' => strval($equipment['id'])
));
$form->addElement('text', 'hours', array(
'label' => $equipment['equipment']['model'] . ' Hours',
'required' => true,
'belongsTo' => strval($equipment['id'])
));
}
但是,使用此方法,仅显示最后一件设备的信息。如果有办法设置我想不到的,请告诉我。我只需要能够在最后解析一系列数据,然后我就可以从那里获取数据。
提前感谢您的帮助。
答案 0 :(得分:1)
每次循环传递都会添加相同的元素。 addElement
的第二个参数是元素标识符(在您的情况下为roi
和hours
)。
可能的替代方案如下:
foreach ($event['equipment'] as $equipment)
{
$form->addElement('text', 'roi' . $equipment['id'] , array(
'label' => $equipment['equipment']['model'] . ' ROI',
'required' => true,
'belongsTo' => strval($equipment['id'])
));
$form->addElement('text', 'hours' . $equipment['id'], array(
'label' => $equipment['equipment']['model'] . ' Hours',
'required' => true,
'belongsTo' => strval($equipment['id'])
));
}
(通过将ID附加到每个元素名称/标识符)。
可能有其他解决方案,但您始终需要为添加到表单的每个元素都有唯一标识符。
希望有所帮助,