7

我想自定义 symfony2 表单中的错误处理。如果发生错误,输入字段应该有另一个类来显示输入值不正确。

我怎样才能做到这一点?我知道我必须自定义渲染模板,但我真的不知道该怎么做。我必须自定义所有输入模板吗?如果输入包含错误,我该如何检查?

4

4 回答 4

12

如果你不想使用自定义表单,那么你可以这样做(我有 Symfony 2.6 和 Bootstrap 3):

    <div class="form-group {% if not form.YOUR_ELEMENT.vars.valid %}has-error{% endif %}">
        {{ form_label(form.YOUR_ELEMENT) }}
        {{ form_widget(form.YOUR_ELEMENT) }}
    </div>
于 2015-03-23T14:47:40.857 回答
6

这是我使用自定义表单主题的解决方案。我复制了标准widget_attributes块并在{# ADD ERROR START #}和之间添加了代码{# ADD ERROR END #}。你只需{% set errorClass = 'error' %}要用你的错误类替换值。

此解决方案将指定的错误类添加到所有有错误的小部件。

{% block widget_attributes %}
    {% spaceless %}
        {# ADD ERROR START #}
        {% if errors|length > 0 %}
            {% set errorClass = 'error' %}
            {% if attr.class is defined %}
                {% set errorClass = errorClass ~ ' ' ~ attr.class %}
            {% endif %}
            {% set attr = attr|merge({'class': errorClass}) %}
        {% endif %}
        {# ADD ERROR END #}
        id="{{ id }}" name="{{ full_name }}"
        {%- if read_only %} readonly="readonly"{% endif -%}
        {%- if disabled %} disabled="disabled"{% endif -%}
        {%- if required %} required="required"{% endif -%}
        {%- if max_length %} maxlength="{{ max_length }}"{% endif -%}
        {%- if pattern %} pattern="{{ pattern }}"{% endif -%}
        {%- for attrname, attrvalue in attr -%}
            {{- " " -}}
            {%- if attrname in ['placeholder', 'title'] -%}
                {{- attrname }}="{{ attrvalue|trans({}, translation_domain) }}"
            {%- elseif attrvalue is sameas(true) -%}
                {{- attrname }}="{{ attrname }}"
            {%- elseif attrvalue is not sameas(false) -%}
                {{- attrname }}="{{ attrvalue }}"
            {%- endif -%}
        {%- endfor -%}
    {% endspaceless %}
{% endblock widget_attributes %}
于 2014-03-13T15:42:56.587 回答
3

您可以使用表单主题并覆盖默认主题。前任。了解MopaBootstrapBundle主题如何使用 Twitter Bootstrap 理念完全应用您想要的。

于 2012-07-23T13:14:26.310 回答
1

如前所述,使用表单主题。您可以使用parent()宏来避免重复代码:

{%- block widget_attributes -%}
    {% if errors|length > 0 %}
        {% set _class = 'has-error' %}
        {% if attr.class is defined %}
           {% set _class = _class ~ ' ' ~ attr.class|trim %}
        {% endif %}
        {% set attr = attr|merge({'class': _class}) %}
    {% endif %}
    {{- parent() -}}
{%- endblock widget_attributes -%}
于 2016-05-16T20:14:09.927 回答