我的表格有字段集:
$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>
我该怎么做?
答案 0 :(得分:15)
您需要了解Zend\Form\Fieldset
不等于HTML <fieldset>
! Zend\Form\Fieldset
只是Zend\Form\Element
的集合,通常代表一个实体,您可以为一个实体提供来自一个表单的数据。
现在,在渲染表单时,您应该了解的第一件事是几个Zend\Form\View\Helper
- 类。您正在使用form()
视图助手,它会使用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();?>
现在,这已经有了一些安慰,因为你正在使用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()
等等......