ZF2如何在表单fieldset中包装内容?

Ild*_*dar 5 php zend-framework2

我有字段集的表单:

$formConfig = array(
    'fieldsets' => array(
        ...
    );
);

$factory = new Zend\Form\Factory();
$form = $factory->createForm($formConfig); 
echo $this->form($form);
Run Code Online (Sandbox Code Playgroud)

它呈现如下:

<form>
    <fieldset>
        <legend>Fieldset label</legend>
        <label><span>Elem 1</span><input type="text" name="f1[el1]" /></label>
        <label><span>Elem 2</span><input type="text" name="f1[el2]" /></label>
        <label><span>Elem 3</span><input type="text" name="f1[el3]" /></label>
    </fielset>
</form>
Run Code Online (Sandbox Code Playgroud)

问题是我需要在传奇之后包装内容:

<form>
    <fieldset>
        <legend>Fieldset label</legend>
        <div class="wrapper">
            <label><span>Elem 1</span><input type="text" name="f1[el1]" /></label>
            <label><span>Elem 2</span><input type="text" name="f1[el2]" /></label>
            <label><span>Elem 3</span><input type="text" name="f1[el3]" /></label>
        <div>
    </fielset>
</form>
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Sam*_*Sam 15

再一次,您需要了解a Zend\Form\Fieldset不等于HTML <fieldset>!A Zend\Form\Fieldset只是一个Zend\Form\Element通常代表一个实体的集合,您可以为一个实体提供来自一个表单的数据.

现在,在渲染表单时,您应该了解的第一件事是几个Zend\Form\View\Helper类.您正在使用form()view-helper,它会自动转换所有Zend\Form\Element使用formRow()和全部Zend\Form\Fieldset使用formCollection().但你不想那样做!

想要您喜欢的输出时,您需要自己渲染表单.像这样的东西可能是你的视图模板:

<?=$this->form()->openTag($form);?>
    <fieldset>
        <div class="wrapper">
            <?=$this->formRow($form->get('f1')->get('el1'));?>
            <?=$this->formRow($form->get('f1')->get('el2'));?>
            <?=$this->formRow($form->get('f1')->get('el3'));?>
        </div>
    </fieldset>
<?=$this->form()->closeTag();?>
Run Code Online (Sandbox Code Playgroud)

现在,这已经有了一点安慰,就像你正在使用的那样formRow().你也可以拆分每个表格行,然后采取非常详细的方式:

<label>
    <span><?=$this->formLabel($form->get('f1')->get('el1'));?></span>
    <?=$this->formInput($form->get('f1')->get('el1'));=>
    <?=$this->formElementErrors($form->get('f1')->get('el1'));?>
</label>
Run Code Online (Sandbox Code Playgroud)

即使在那里,formInput()仍是派生到的东西像一个魔术formText(),formSelect(),formTextarea(),等,等...

  • 字段集澄清+1.对ZF2社区来说,这是一个令人讨厌的命名选择.为什么不使用FieldCollection或更不明确和混乱的东西? (2认同)