【问题标题】:Symfony2 - Form errors (for the entire form, NOT individual fields) not displayingSymfony2 - 表单错误(对于整个表单,而不是单个字段)不显示
【发布时间】:2013-01-22 23:07:33
【问题描述】:

Symfony2 Google Group 交叉发布,因为我的问题没有任何回应。

我有以下表格:

<form id="contact-form" action="{{ path('_contact') }}" method="post" {{ form_enctype(form) }}>
    <fieldset>
        <legend>Send us a message</legend>

        {{ form_errors(form) }}

        <div>
            <p class="label">{{ form_label(form.name) }}</p>
            {{ form_widget(form.name, { 'attr' : { 'class' : 'input' } }) }}
        </div>
        <div>
            <p class="label">{{ form_label(form.email) }}</p>
            {{ form_widget(form.email, { 'attr' : { 'class' : 'input' } }) }}
        </div>
        <div>
            <p class="label">{{ form_label(form.subject) }}</p>
            {{ form_widget(form.subject, { 'attr' : { 'class' : 'input' } }) }}
        </div>
        <div>
            <p class="label">{{ form_label(form.message) }}</p>
            {{ form_widget(form.message, { 'attr' : { 'class' : 'input', 'rows' : '8', 'placeholder' : 'Type your message here' } }) }}
        </div>
        <div class="hidden">
            <p class="label">{{ form_label(form.honeypot) }}</p>
            {{ form_widget(form.honeypot) }}
        </div>

        {{ form_rest(form) }}
    </fieldset>

我不喜欢字段错误直接出现在他们的字段附近。我只想列出表单本身上方的所有错误,这就是为什么每个字段都没有错误的原因。我正在使用稍微修改过的 form_errors 主题:

{# src/MajorProductions/SewingDiva/SiteBundle/Resources/views/errors.html.twig #}
{% block form_errors %}
    {% spaceless %}
        {% if errors|length > 0 %}
            <div class="errors">
                <ul>
                    {% for error in errors %}
                        <li>{{
                        error.messagePluralization is null
                        ? error.messageTemplate|trans(error.messageParameters, 'validators')
                        : error.messageTemplate|transchoice(error.messagePluralization, error.messageParameters, 'validators')
                        }}</li>
                    {% endfor %}
                </ul>
            </div>
        {% endif %}
    {% endspaceless %}
{% endblock form_errors %}

我只是将默认设置放在 &lt;div&gt; 中,这样我可以更轻松地设置它的样式。

我的问题是根本没有显示表单错误列表。如,HTML 中没有空的&lt;div&gt;,什么也没有。如果我输入字段级错误的代码,例如 {{ form_errors(form.email) }},它就会显示出来。

我想我可以用类似的东西来凑合它:

<div class="errors">
    {{ form_errors(form.name) }}
    {{ form_errors(form.email) }}
    .
    .
    .
</div>

但这并不能真正解决问题。

有什么想法吗?

【问题讨论】:

    标签: php forms symfony error-handling


    【解决方案1】:

    也许您可以尝试以下主题,它对我有用:

    {% block form_errors %}
        {% spaceless %}
             {% if errors|length > 0 %}
                  {% if compound %}
                  <ul class="form-errors">
                      {% for error in errors %}
                      <li>{{ error.messageTemplate|trans(error.messageParameters, 'validators') }}</li>
                      {% endfor %}
                  </ul>
                  {% else %}
                  <ul class="form-field-errors">
                      {% for error in errors %}
                      <li>{{ error.messageTemplate|trans(error.messageParameters, 'validators') }}</li>
                      {% endfor %}
                 </ul>
                {% endif %}
            {% endif %}
        {% endspaceless %}
    {% endblock form_errors %}
    

    注意复合选项的使用。

    您可能必须将每个字段的 error_bubbling 设置为 true

    (注:这不是我写的,我不记得应该归功于哪个好心人)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-18
      • 2016-07-14
      • 2016-05-20
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多