2011-06-21 99 views
1

在Symfony中嵌入表單時,嵌入表單的標籤被注入到父表單中。例如:如果我有一個PersonForm並添加此代碼$this->embedForm('Address', $addressForm),我的PersonForm現在除了組成AddressForm的字段的標籤之外,其中還有一個「地址」標籤。我想保留單個字段的標籤,但要刪除「地址」標籤,從而表明這兩種形式確實是一種。Symfony嵌入式表單 - 可能不顯示嵌入式表單的「父」標籤?

可以重寫表單模板並手動遍歷表單元素並逐個回顯它們,但我經常遇到這種情況,我寧願讓Symfony自動處理它。

回答

1

這裏是禁止所有標籤的簡單方法。如果頻繁使用,請將此方法添加到BaseForm

public function disableLabels() 
{ 
    $fields = $this->getWidgetSchema()->getFields(); 
    $this->getWidgetSchema()->setLabels(array_combine(array_keys($fields), array_fill(0, count($fields), false))); 
} 

如果你只是想在嵌入式形式禁用標籤,嵌入前禁用它們:

$form = new FormToEmbed(); 
$form->disableLabels(); 
$parent->embedForm('child', $form); 
2

根據您的情況,手動通過小部件進行迭代是唯一的選擇。另一種選擇是擴展sfWidgetFormSchemaFormatter,但不允許隱藏嵌入式表單的標籤,同時不會隱藏其他任何小部件。

如果您經常遇到這種情況,您可以考慮創建一個局部用於以這種特定方式呈現您的表單。

3

下面的代碼將允許您將標籤設置爲另一個空字符串,但我懷疑它仍然會出現。

$this->embedForm('Address', $addressForm) 
$this->widgetSchema['Address']->setLabel(''); 

但是我懷疑使用的最好的事情是看6點(embedMergeForm)這個頁面上,並使用該http://itsmajax.com/2011/01/29/6-things-to-know-about-embedded-forms-in-symfony/

+0

我嘗試設置標籤空白(它實際需要的是「 」),但標籤元素仍然在HTML中,導致換行。我現在正在查看您的鏈接... –

+0

將標籤設置爲「false」將會阻止它完全呈現。但是,這對Arms並不需要隱藏嵌入表單的每個小部件上的標籤。 –

+0

@jeremy我只是試圖將'父'標籤設置爲'false',它的工作完美。記住編輯你的答案,以便我可以接受它? –