【问题标题】:Adding class to invalid form errors in symfony2在 symfony2 中向无效表单错误添加类
【发布时间】:2012-07-21 16:17:24
【问题描述】:

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

我该怎么做? 我知道我必须自定义渲染模板,但我真的不知道该怎么做。我必须自定义所有输入模板吗?以及如何检查输入是否包含错误?

【问题讨论】:

    标签: php forms validation symfony


    【解决方案1】:

    如果你不想使用自定义表单,那么你可以这样做(我有 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>
    

    【讨论】:

    • 谢谢你,这正是我想要的。
    【解决方案2】:

    这是我的解决方案,custom form theme。我复制了标准的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 %}
    

    【讨论】:

      【解决方案3】:

      您可以使用form themes 并覆盖默认主题。前任。了解 MopaBootstrapBundle 主题如何使用 Twitter Bootstrap 理念应用 exactly you want。

      【讨论】:

        【解决方案4】:

        如前所述,使用表单主题。 您可以使用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-04-25
          • 2013-10-07
          • 2013-10-14
          • 1970-01-01
          • 1970-01-01
          • 2013-11-01
          • 1970-01-01
          • 2012-09-30
          • 1970-01-01
          相关资源
          最近更新 更多