ZF2已添加formCollection
,您可以在页面加载后动态添加formElement
。
我有一个动态行数表,每个行都应该有一个文本字段:
foreach ($types as $type) :
?>
<tr><td><?php echo $type ?></td><td><?php echo $this->formRow($form->get('amount')); ?></td></tr>
<?php
endforeach;
我循环遍历一个项目数组并打印我的表的行/列,但似乎formCollection只允许您一次打印所有字段。
是否可以打印每个循环中的一个文本字段?所有文档都讨论了使用模板和JavaScript动态添加元素。但我基本上只想要一个我已经知道数量的输入数组。
似乎我无法在我的控制器中更改它们的count
。试过这个:
$types = array(1,2,3,4,5)
$form = new ThingsForm();
$form->get('amounts')->setOptions(array(
'count' => count($types)
));
我尝试只收集count => 1
集合,然后打印其中许多,但是当你填充它们时,它只被视为一个项目。
答案 0 :(得分:1)
更短,更有用的版本:
$form->get('amounts')->setCount(count($types))->prepareFieldset();
答案 1 :(得分:0)
似乎我已经破解了它并且这并不容易,所以我怀疑这是否是推荐的方式,或者它是否是一个未经考虑的用例:
收藏品:
$this->add(array(
'type' => 'Zend\Form\Element\Collection',
'name' => 'amounts',
'options' => array(
'allow_add' => true,
// Has to be 0 as you set the count later (and that adds)
'count' => 0,
'target_element' => array(
'type' => 'Application\Form\AmountForm'
)
),
'required' => true,
));
抓住表单并将计数设置在控制器操作的某个位置:
$form = new AmountTypesForm();
$form->get('amounts')->setOptions(array(
'count' => count($typesOfThings)
))->prepareFieldset();
视图中的循环
foreach ($types as $type) :
?>
<tr><td><?php echo $type ?></td><td><?php echo $this->formRow($form->get('amount')->getIterator()->extract()); ?></td></tr>
<?php
endforeach;