2012-04-17 118 views
0

我正在建立一个使用Zend_Form的表单,并尝试嵌套深度多层的子表单。结果我以后如下:Zend_Form_SubForm嵌套多层深

<div id="details"> 
    <table class="subForm"> 
     <tr> 
      <td> 
       <!-- Element --> 
      </td> 
      <td> 
       <!-- Element --> 
      </td> 
     </tr> 
    </table> 
</div> 
<div id="content"> 
    <table class="subForm"> 
     <tr> 
      <td> 
       <!-- Element --> 
      </td> 
      <td> 
       <!-- Element --> 
      </td> 
     </tr> 
    </table> 
</div> 

当前做到这一点,我创建了一个子形式与我的元素和装饰,连接的是与装饰(没有元素)的亚形式,这是然后附加到表单。

// create sub form container decorators 
public $subFormContainerDecorators = array(
    array('FormElements'), 
    array(array('data' => 'HtmlTag'), array('tag' => 'div', 
              'id' => 'details')) 
); 

// create sub form decorators 
public $subFormDecorators = array(
    array('FormElements'), 
    array(array('data' => 'HtmlTag'), array('tag' => 'table', 
              'class' => 'subForm')) 
); 

// create sub form and attach elements 
$details = new Zend_Form_SubForm(); 
$details->setDecorators($this->subFormDecorators); 
$details->addElement($name) 
     ->addElement($save); 

// create container div 
$detailsContainer = new Zend_Form_SubForm(); 
$detailsContainer->setDecorators($this->subFormContainerDecorators); 
$detailsContainer->addSubForm($details, 'details'); 

// attach subform container to main form 
$this->addSubForm($detailsContainer, 'detailsContainer'); 

这是我目前似乎可以实现我需要的嵌套级别的唯一方法。但是,这也需要我为每个子表单集合创建所有容器及其子表单的装饰器。我看不出有任何其他的方式来实现这一点,但我相信会有比这更好的方法。

如果有人能帮助它将不胜感激。

回答

1

您只需将div HtmlTag装饰器添加到$ sbFormDecorators中,并完全忽略容器。

public $subFormDecorators = array(
    array('FormElements'), 
    array(array('data' => 'HtmlTag'), array('tag' => 'table', 'class' => 'subForm')), 
    array(array('dataContainer' => 'HtmlTag'), array('tag' => 'div', 'id' => 'details')), 
); 
+0

这看起来似乎在subForm表旁边添加了一个空的div,其ID为'details'。我错过了什么吗? – 2012-04-17 10:06:44

+0

完美!到底是什么我以后。干杯。 – 2012-04-17 10:37:56