字段集中的 zf2 TwbBundle 按钮组

zf2 TwbBundle button group inside fieldset

我正在使用 zf2 和 TwbBundle。我想在各种表单的末尾添加两个按钮作为按钮组。当我直接将它们作为两个对象添加到表单中并设置了按钮组选项时,它呈现得很好。

$this->add(array(
    'name' => 'submit',
    'type' => 'Button',
    'options' => array(
        'label' => 'Speichern',
        'button-group' => 'group-1',
    ),
    'attributes' => array(
        'type' => 'submit',
        'class' => 'btn btn-primary btn-lg',
    ),
));

$this->add(array(
     'name' => 'cancel',
     'type' => 'Button',
     'options' => array(
         'label' => 'Abbrechen',
         'button-group' => 'group-1',
     ),
    'attributes' => array(
         'type' => 'submit',
         'class' => 'btn btn-default btn-lg',
    ),
));

这导致:

<div class="form-group ">
    <div class="btn-group">
        <button type="submit" name="submit" class="btn btn-primary btn-lg" value="">Speichern</button>
        <button type="submit" name="cancel" class="btn btn-default btn-lg" value="">Abbrechen</button>
    </div>
</div>

但是一旦我将它们提取到一个可重用的字段集中,每个元素都会包装在它自己的 form-group 元素中,不再呈现为按钮组。

<fieldset>
    <div class="form-group ">
        <button type="submit" name="form-controls[submit]" class="btn btn-primary btn-lg" value="">Speichern</button>
    </div>
    <div class="form-group ">
        <button type="submit" name="form-controls[cancel]" class="btn btn-default btn-lg" value="">Abbrechen</button>
    </div>
</fieldset>

我尝试将 css classes 或按钮组选项添加到表单 class 的字段集中,但没有达到预期的效果。

有人遇到过同样的问题或者可能对如何实现这个有想法吗?

干杯 詹斯

编辑:应要求提供附加代码。字段集的定义方式:

<?php
namespace Application\Form;

use Zend\Form\Fieldset;

class FormControls extends Fieldset
{
    public function __construct()
    {
        parent::__construct('form-controls');

        $this->add(array(
            'name' => 'submit',
            'type' => 'Button',
            'options' => array(
                'label' => 'Speichern',
                'button-group' => 'group-1',
            ),
            'attributes' => array(
                'type' => 'submit',
                'class' => 'btn btn-primary btn-lg',
            ),
        ));

        $this->add(array(
            'name' => 'cancel',
            'type' => 'Button',
            'options' => array(
                'label' => 'Abbrechen',
                'button-group' => 'group-1',
            ),
            'attributes' => array(
                'type' => 'submit',
                'class' => 'btn btn-default btn-lg',
            ),
        ));
    }
}

并包括在内:

$this->add(array(
    'name' => 'form-controls',
    'type' => 'Application\Form\FormControls',
));

您获得额外字段集标记的原因是,您通过字段集添加元素。

class FormControls extends Fieldset

$this->add(array(
    'name' => 'form-controls',
    'type' => 'Application\Form\FormControls',
));

解决方案是让 (form/fieldset) class 添加:

$this->add(array(
    'name' => 'form-controls',
    'type' => 'Application\Form\FormControls',
));

扩展一个 (form/fieldset) class 包含:

$this->add(array(
    'name' => 'submit',
    'type' => 'Button',
    'options' => array(
        'label' => 'Speichern',
        'button-group' => 'group-1',
    ),
    'attributes' => array(
        'type' => 'submit',
        'class' => 'btn btn-primary btn-lg',
    ),
));

$this->add(array(
     'name' => 'cancel',
     'type' => 'Button',
     'options' => array(
         'label' => 'Abbrechen',
         'button-group' => 'group-1',
    ),
    'attributes' => array(
         'type' => 'submit',
         'class' => 'btn btn-default btn-lg',
    ),
));

因此您可以拥有可重复使用的按钮。结果将是这样的结构:CoolForm extends ButtonForm extends Form,其中:

  • Form 将是 Zend class
  • ButtonForm 是 class 定义和添加按钮
  • CoolForm 是实际使用的表单,它继承了按钮而没有字段集包裹它们