在Symfony中嵌入表单时,嵌入表单的标签将注入父表单。例如:如果我有PersonForm
并添加此代码$this->embedForm('Address', $addressForm)
,我的PersonForm
现在将在其中包含“地址”标签,以及组成字段的标签AddressForm
。我想保留各个字段的标签,但要删除“地址”标签,从而使两个表单看起来真的是一个。
可以覆盖表单模板并手动遍历表单元素并逐个回显它们,但我经常遇到这种情况,我更希望让Symfony自动处理它。
答案 0 :(得分: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/
答案 1 :(得分:2)
根据您的情况,手动迭代小部件是唯一的选择。另一个选项是扩展sfWidgetFormSchemaFormatter,但这不允许隐藏嵌入表单的标签,同时不会将其隐藏到任何其他窗口小部件。
如果您经常遇到这种情况,可以考虑创建一个仅用于以特定方式呈现表单的部分内容。
答案 2 :(得分: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);