Symfony形成如何将类添加到表单组

时间:2016-05-02 07:48:49

标签: forms symfony

使用:

->add('name', TextType::class, [
                'label' => 'Name',
                'required' => true,
                'attr' => [
                    'class' => 'myclass'
                ],
            ])

我正在将“myclass”类添加到<input>元素中,获取:

<div class="form-group">
  <label ...>Name</label>
  <input type="text" required="required" class="myclass" ...>
</div>

如果我想将“myclass”类不添加到输入本身,而是添加到其<div class="form-group">容器中,以获得:

<div class="form-group myclass">
  <label ...>Name</label>
  <input type="text" required="required" ...>
</div>

实现这一目标的最佳方法是什么?

4 个答案:

答案 0 :(得分:6)

我实际上找到了一种在PHP(Symfony 4.4.2)中做到这一点的方法。类必须进入“ row_attr”而不是“ attr”。对于给定的示例,它将是:

->add('name', TextType::class, [
                'label' => 'Name',
                'required' => true,
                'row_attr' => [
                    'class' => 'myclass'
                ],
            ])

相关文档:https://symfony.com/doc/current/reference/forms/types/text.html#row-attr

答案 1 :(得分:2)

在我的情况下,我需要覆盖 form_row 块:

{% block form_row -%}
    <div class="form-group myclass{% if (not compound or force_error|default(false)) and not valid %} has-error{% endif %}">
        {{- form_label(form) -}}
        {{- form_widget(form) -}}
        {{- form_errors(form) -}}
    </div>
{%- endblock form_row %}

如建议的那样,docs有助于理解原因。

答案 2 :(得分:1)

正如@Yoshi指出的那样,在表单定义中,您无法将类添加到容器div

自定义表单呈现的正确方法是通过Twig覆盖基本块,如下所述:http://symfony.com/doc/current/cookbook/form/form_customization.html#how-to-customize-an-individual-field(顺便说一句,我建议您仔细阅读整篇文章,了解有关自定义的所有信息)。 / p>

如果您需要,则在已覆盖的块中还有widget数据。添加具有字段ID的类:

{% block _product_name_widget %}
    <div class="text_widget {{ id }}">
        {{ block('form_widget_simple') }}
    </div>
{% endblock %}

在上面的示例中,{{ id }}将替换为widget(字段)id。

答案 3 :(得分:0)

'row_attr' 解决方案对我有用