1

ZF2 已添加formCollection,它让您可以formElement在页面加载后动态添加 s。

我有一个动态行数表,每个行都应该有一个文本字段,如:

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该系列,然后打印其中的许多,但是当您填充它们时,它只会被视为一件。

4

2 回答 2

1

更短,更有用的版本:

$form->get('amounts')->setCount(count($types))->prepareFieldset();
于 2012-11-27T16:24:45.493 回答
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;
于 2012-10-25T20:26:55.727 回答