52

我知道您可以在 twig 中拆分表单并选择不为特定字段呈现标签,但我不禁认为您必须能够从表单类中执行此操作。options 数组中的 '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 
            ));

奇怪的是,通过一个空的空间(感觉很脏)似乎会渲染一个完全空的标签,即使在查看源代码时也没有空间。任何人都可以阐明最佳方法,甚至为什么空白空间似乎有效吗?

4

6 回答 6

116

从 Symfony 2.2 开始,您可以使用属性的值来避免<label>渲染:falselabel

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('Name', null, array('label' => false))
    ;
}

资源

于 2013-03-19T02:22:20.907 回答
18

将“视图”规范与“模型”分开

如果您按照接受的答案说:

$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 文档

于 2015-07-17T14:58:38.793 回答
10

只需将 {'label':false} 添加到您的 form_row()

{{ form_row(form.name, {'label':false}) }}
于 2017-05-19T17:30:32.870 回答
3

要隐藏我的标签,我必须只渲染字段的小部件,而不是标签,例如

{{ form_widget(edit_form.event) }}
{{ form_rest(edit_form) }}

带有空格的 ' ' 标签的问题在于,它仍然呈现存在并影响页面的 html 输入。

于 2012-12-19T16:50:20.410 回答
3

我不太明白你的问题,但以显示标签名称的形式,我个人喜欢这样:

  $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>
于 2012-05-15T23:11:44.193 回答
2

这应该可以工作(尽管它不是一个非常干净的解决方案)

$builder
        ->add('roles', 'entity', array(
            'class' => 'Acme\UserBundle\Entity\Role',
            'label' => ' ' 
        ));

(注意刻度之间的空间)

于 2012-10-29T09:21:59.720 回答