【问题标题】:How do you hide labels in a form class in symfony2?如何在 symfony2 的表单类中隐藏标签?
【发布时间】:2012-05-23 02:15:15
【问题描述】:

我知道您可以在 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 
            ));

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

【问题讨论】:

  • 更正,Symfony 2.0.x 无法做到这一点,但 cheesemacfly 提供了 2.2+ 版本的正确答案。

标签: php forms class symfony


【解决方案1】:

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

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

Source

【讨论】:

  • 谢谢。我最初问的是与 2.0.x 项目有关的问题,但由于我没有指定版本,我认为这是正确的答案。此外,由于它是新添加的,显然无法在表单类的早期版本中执行此操作,因此这有望帮助遇到类似问题的人。
  • @Mark 很有趣,从今天开始它在 2.0.x 中可用:symfony.com/blog/symfony-2-0-23-released(我发誓我与它无关:D)
  • 哈。在那种情况下,这绝对是正确的答案。如果有人没有阅读 cmets 并将他们的整个应用程序升级到 2.2 只是为了获得这个很棒的功能,可能值得在你的答案中添加它:)
  • 相关项——如果你想使用 HTML 5 占位符文本而不是标签,请在表单构建器数组之后使用 'attr' => array('placeholder'=>'Your Name')标签=>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' =&gt; true) 会在任何地方打开标签

如果您使用一个衬垫{{ form(form) }} 呈现您的表单,那么您应该看看symfony docs

【讨论】:

  • 我完全同意这个补充。
  • 但是,这样做有一个小缺点:如果您使用的是布局(例如 bootstrap_3_horizo​​ntal_layout),则可能会破坏它并出现渲染问题。我建议 OP 覆盖他的表单的布局(这很容易:cf. Symfony documentation
  • 您并不经常重复使用表单。不同的页面有不同的要求,通常你最终只会传入一个新的表单类和新的对象类。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

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

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

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

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

      【讨论】:

      • 这种方式更好,因为它不会将“视图”规范放入模型中。如果您想保留错误,您可能还想添加{{ form_errors(form.name) }}
      【解决方案6】:

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

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

      (注意刻度之间的空间)

      【讨论】:

      • 谢谢你,但你会注意到我在问题中的代码 sn-p 下提到了这个解决方案
      猜你喜欢
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 2021-08-29
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      相关资源
      最近更新 更多