2012-04-17 164 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