如何防止Twig将表单控件类添加到它生成的字段中? 如果不更改主题,就无法避免解决方法,同时保留您正在使用的大多数表单主题

我有此代码:

{% 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类,这破坏了页面的设计。

在这个问题(delete form-control in form-row symfony/twig)中,提到它是默认Bootstrap主题的一部分,他们讨论了如何在应用程序级别停用此主题。

但是,如果可能的话,我不希望进行这种根本性的改变。我想告诉Twig不要添加类。

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

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

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

有没有办法告诉树枝不要将form-control类写到这些文本字段中?

yunxiao856 回答:如何防止Twig将表单控件类添加到它生成的字段中? 如果不更改主题,就无法避免解决方法,同时保留您正在使用的大多数表单主题

如果不更改主题,就无法避免

您不能“告诉树枝不要添加课程”。

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: ['form/your_theme.html.twig']
    # ...
本文链接:https://www.f2er.com/3144704.html

大家都在问