ZF2 - 动态输入量(不含JavaScript)

时间:2012-10-25 18:45:38

标签: php zend-framework2

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集合,然后打印其中许多,但是当你填充它们时,它只被视为一个项目。

2 个答案:

答案 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;