2011-06-21 78 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',它的工作完美。记住编辑你的答案,以便我可以接受它? –