如何在特定位置添加zend表单元素?

时间:2017-03-02 10:31:26

标签: zend-framework2 zend-form-element zend-form2

我创建了一个抽象表单类,它向表单添加了submit元素。当我的其他表单类扩展此表单类时,我不得不在类的底部调用parent::__construct(),以便最后添加submit元素。

如果我首先调用parent::__construct(),如何将提交按钮设置为始终是表单中的最后一个元素,事件?

2 个答案:

答案 0 :(得分:2)

表单add函数接受两个参数 - 数组或元素实例,以及flags数组。其中一个标志选项是priority。数字越小,它出现的元素列表中的值越低。因此,将其设置为-1000(除非您有超过1000个元素)将设置提交按钮显示在窗体的底部:

$this->add([
    'name' => 'submit',
    'type' => 'submit',
    'attributes' => [
        'value' => 'Submit',
        'class' => 'btn btn-sm',
    ],
    'options' => []
],
[ 'priority' => -1000 ]);

答案 1 :(得分:1)

RichardParanby-King的回答很好,但对于这个观点非常谨慎:

在视图中,我们有很多选项来显示表单:

  • <?= $this->form($form)?>
  • <?= $form->get('{element}') ?>
  • 循环$form->getIterator()
  • 循环$form->getElements()

等...

我不得不说我在所有项目中都使用了很多这个结构:

<?php foreach ($form->get('fieldset')->getElements()  as $elementName => $element): ?>
     <?= $this->partial('partial/formElement', ['element' => $element])?>
<?php endforeach ?>

问题是:getElements不使用优先级,因此它只是按照实例化的顺序给出元素。

在视图中,我们必须使用迭代方法($form->getIterator())来获取此优先级。