5

我有字段集的表单:

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

$factory = new Zend\Form\Factory();
$form = $factory->createForm($formConfig); 
echo $this->form($form);

它呈现如下内容:

<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>

问题是我需要在图例之后包装内容:

<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>

我怎样才能做到这一点?

4

1 回答 1

16

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

现在,当涉及到渲染表单时,您应该了解的第一件事是几个Zend\Form\View\Helper-Class。您正在使用form()view-helper,它会自动翻译所有Zend\Form\ElementusingformRow()和 all Zend\Form\Fieldsetusing 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();?>

现在,这已经有了一点安慰,因为您将使用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>

即使在那里,formInput()仍然有一种魔力可以衍生为formText(), formSelect(), formTextarea(), 等..., 等等...

于 2013-04-05T06:12:38.420 回答