我知道您可以在树枝中拆分表单并选择不渲染特定字段的标签,但我忍不住认为您必须能够从表单类中执行此操作。选项数组中的“label”键允许您将此值更改为您喜欢的任何值,但传递 false 或空字符串只会返回字段名称(请参阅下面的示例,其中“roles”呈现为标签)。
$builder
->add('roles', 'entity', array(
'class' => 'Acme\UserBundle\Entity\Role',
'label' => ''
));
$builder
->add('roles', 'entity', array(
'class' => 'Acme\UserBundle\Entity\Role',
'label' => false
));
奇怪的是,传递一个空的空间(感觉很脏)似乎会渲染一个完全空的标签,即使在查看源代码时也没有空间。谁能阐明最好的方法,甚至为什么空的空间似乎有效?
从 Symfony 2.2 开始,您可以使用
<label>
属性的 false
值来避免 label
渲染:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('Name', null, array('label' => false))
;
}
将“视图”规格与“模型”分开
如果您遵循已接受的答案:
$builder
->add('Name', null, array('label' => false))
;
您的表格不可重复使用。特别是如果您的表单出现在多个位置(或将来可能)。
如果您不想渲染表单标签,最好在 Twig 中渲染(假设您使用 Twig)。
不要渲染
{{ form_row(form.name) }}
,而是单独渲染每个元素并排除 form_label
例如。
{{ form_errors(form.name) }}
{# {{ form_label(form.name) }} <-- just dont include this #}
{{ form_widget(form.name) }}
如果您希望在表单的一个实例中使用标签,而不是在另一个实例中,只需添加
{{ form_label(form.name) }}
就足够了;更改 array('label' => true)
会在各处打开标签
如果您使用单行渲染表单
{{ form(form) }}
那么您应该查看 symfony 文档
只需将 {'label':false} 添加到您的 form_row()
{{ form_row(form.name, {'label':false}) }}
我不太明白你的问题,但以显示标签名称的形式,我个人确实喜欢这样:
$builder
->add('role', 'text')
在我的树枝上:
<tr>
<td>{{ form_widget(form.role) }} </td>
<td>{{ form_label(form.role, "Name of Label") }}</td>
</tr>
<tr>
<td>{{ form_errors(form.role) }}</td>
</tr>
要隐藏我的标签,我必须只渲染字段的小部件,而不是标签,例如
{{ form_widget(edit_form.event) }}
{{ form_rest(edit_form) }}
带有空格的“ ”标签的问题是,它仍然呈现那里的 html 输入并影响页面。
这应该可行(尽管它不是一个非常干净的解决方案)
$builder
->add('roles', 'entity', array(
'class' => 'Acme\UserBundle\Entity\Role',
'label' => ' '
));
(注意刻度之间的空格)
在 formType 中你可以这样做:它将隐藏标签而不保留空格
$builder
->add('roles', 'entity', array(
'class' => 'Acme\UserBundle\Entity\Role',
'attr_label' => array("class"=>"d-none")
));