使用:
->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>
实现这一目标的最佳方法是什么?
答案 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' 解决方案对我有用