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

时间:2012-05-15 14:27:49

标签: php forms class symfony

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

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

6 个答案:

答案 0 :(得分:94)

从Symfony 2.2开始,您可以使用<label>属性的false值来避免label呈现:

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

Source

答案 1 :(得分:15)

  

保持你的观点&#39;规格与您的&#39;型号&#39;

分开

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

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

答案 2 :(得分:4)

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

即可
{{ form_row(form.name, {'label':false}) }}

答案 3 :(得分:3)

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

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

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

答案 4 :(得分:2)

我不太了解你的问题但是在形式上显示标签的名称,personnaly我喜欢这样:

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

答案 5 :(得分:2)

这应该有用(虽然它不是一个非常干净的解决方案)

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

(注意刻度线之间的空格)