如何在 symfony2 的表单类中隐藏标签?

2022-08-30 10:13:56

我知道你可以用树枝拆分表单,并选择不为特定字段呈现标签,但我不禁认为你必须能够从表单类中做到这一点。选项数组中的“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 
            ));

奇怪的是,传递一个空白区域(感觉非常脏)似乎呈现出一个完全空白的标签,即使在查看源时也没有空间。任何人都可以阐明最佳方法,甚至为什么空白空间似乎有效?


答案 1

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

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


答案 2

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

如果您遵循接受的答案,该答案说:

$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)

如果您使用一个衬里呈现表单,那么您应该查看symfony文档{{ form(form) }}


推荐