基于Zend表单阵列的元素设置和检索

时间:2011-09-18 03:21:15

标签: php zend-framework zend-form

我有两个实体参与此问题。用户可以拥有与其绑定多个设备的事件。我需要一个表单,用户可以在该特定事件中为该设备输入数小时和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'])
  ));
}

但是,使用此方法,仅显示最后一件设备的信息。如果有办法设置我想不到的,请告诉我。我只需要能够在最后解析一系列数据,然后我就可以从那里获取数据。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

每次循环传递都会添加相同的元素。 addElement的第二个参数是元素标识符(在您的情况下为roihours)。

可能的替代方案如下:

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附加到每个元素名称/标识符)。

可能有其他解决方案,但您始终需要为添加到表单的每个元素都有唯一标识符。

希望有所帮助,