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

Mar*_*ark 42 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 
            ));
Run Code Online (Sandbox Code Playgroud)

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

che*_*fly 95

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

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

资源

  • @Mark很有趣,它从今天开始在2.0.x中提供:http://symfony.com/blog/symfony-2-0-23-released(我发誓我与它无关:D) (3认同)
  • 相关项 - 如果要使用HTML 5占位符文本而不是标签,请在label => false之后的表单构建器数组中使用'attr'=> array('placeholder'=>'Your Name'). (2认同)

Chr*_*ris 15

将"查看"规范与"模型"分开

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

$builder
        ->add('Name', null, array('label' => false))
    ;
Run Code Online (Sandbox Code Playgroud)

你的表格不可重复使用.特别是如果您的表单出现在多个位置(或将来可能会出现).

如果你不想渲染表单标签,最好在Twig中这样做(假设你使用Twig).

而不是渲染{{ form_row(form.name) }},渲染每个元素separetly并排除form_label

恩.

{{ form_errors(form.name) }}
 {# {{ form_label(form.name) }} <-- just dont include this #} 
{{ form_widget(form.name) }}
Run Code Online (Sandbox Code Playgroud)

如果在路上你想要一个表格的标签,而不是另一个,只需添加{{ form_label(form.name) }}就足够了; 改变array('label' => true)会在任何地方转变标签

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


Pre*_*cks 9

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

{{ form_row(form.name, {'label':false}) }}
Run Code Online (Sandbox Code Playgroud)