如何防止Twig将表单控件类添加到它生成的字段中?

问题描述 投票:1回答:1

我有此代码:

{% for key, customField in customFields %}
   {{ form_widget(formVirtualTerminal['cf_' ~ key], { 'attr': {'placeholder': customField['FieldDisplayName'], 'name': customField['FieldName'], 'class' : 'row no-gutters mb-3'} }) }} 
{% endfor %}

遍历数组并为其输出一些字段。但是,由于我未知的原因,在所有这些字段中都生成了一个form-control类,这破坏了页面的设计。

Here人们说这是默认Bootstrap主题的一部分,他们讨论如何在应用程序级别上停用此主题。但是,如果可能的话,我不希望进行这种根本性的改变。我想告诉Twig不要添加类。

以下是通过删除该类来解决此问题的技巧:

$("#custom-text-field-container .form-control").removeClass("form-control");

但是,我想避免编写Javascript从最初不应该具有该类的字段中删除类。

是否有一种方法告诉树枝不要将form-control类写入这些文本字段?

php symfony bootstrap-4 twig symfony-forms
1个回答
0
投票

form_widget不接受任何参数来删除将在以后由主题应用的类或属性。基本上,它无法控制模板的功能,仅将模板传递给您所需的任何参数,并且取决于表单模板如何使用该信息。

例如对于HTML类,通常的方法只是将您传递的所有类与模板默认设置的任何类合并。

简单的求助方法是to create to your theme based on the form theme you are using(似乎是'bootstrap_4_layout.html.twig')] >>

您只需要重写妨碍您的部分,就可以保留其他所有内容。

例如:

{# templates/form/your_theme.html.twig #}
{% use 'bootstrap_4_layout.html.twig' %}

{% block form_widget_simple -%}
    {% if type is not defined or type != 'hidden' %}
        {%- set attr = attr|merge({class: (attr.class|default('') ~ (type|default('') == 'file' ? ' custom-file-input' : ''))|trim}) -%}
    {% endif %}
    {%- if type is defined and (type == 'range' or type == 'color') %}
        {# Attribute "required" is not supported #}
        {%- set required = false -%}
    {% endif %}
    {{- parent() -}}
{%- endblock form_widget_simple %}

这几乎与form_widget_simpleas the original相同,我只是删除了与可以通过的类合并的form-control类。

通过在适当的模板中执行此操作,可以仅在想要此自定义主题的模板中使用此表单:

{% form_theme form 'form/your_theme.html.twig' %}

或者如果您想默认使用所有形式:

# config/packages/twig.yaml
twig:
    form_themes: ['bootstrap_4_horizontal_layout.html.twig']
    # ...
© www.soinside.com 2019 - 2024. All rights reserved.