Symfony嵌入式表单 - 可能不显示嵌入式表单的“父”标签?

时间:2011-06-21 14:21:00

标签: php symfony1 symfony-forms

在Symfony中嵌入表单时,嵌入表单的标签将注入父表单。例如:如果我有PersonForm并添加此代码$this->embedForm('Address', $addressForm),我的PersonForm现在将在其中包含“地址”标签,以及组成字段的标签AddressForm。我想保留各个字段的标签,但要删除“地址”标签,从而使两个表单看起来真的是一个。

可以覆盖表单模板并手动遍历表单元素并逐个回显它们,但我经常遇到这种情况,我更希望让Symfony自动处理它。

3 个答案:

答案 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);