2013-04-04 45 views
5

我有表格字段集:ZF2如何在表单fieldset中包装内容?

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

我怎么能去做?

回答

14

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

现在谈到渲染表单时,首先应该了解的是几个Zend\Form\View\Helper类。您正在使用form()视图助手,该助手使用formRow()自动翻译所有Zend\Form\Element,并使用formCollection()自动翻译所有Zend\Form\Fieldset。但你不想这样做!

当你想要你的首选输出时,你将需要自己渲染表单。像这样的东西可能是你的视图模板:

<?=$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(),等,等魔法..

+2

对于Fieldset的澄清+1。 ZF2社区的一部分是一个可怕的命名选择。为什么不去使用FieldCollection或不太模糊和混淆的东西? – Xunnamius 2013-09-16 21:49:10