1

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

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

4

2 回答 2

2

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

$this->add([
    'name' => 'submit',
    'type' => 'submit',
    'attributes' => [
        'value' => 'Submit',
        'class' => 'btn btn-sm',
    ],
    'options' => []
],
[ 'priority' => -1000 ]);
于 2017-03-02T10:31:25.793 回答
1

RichardParanby-King 的回答很好,但对观点要谨慎:

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

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

ETC...

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

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

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

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

于 2017-03-03T08:13:34.817 回答