0

私の質問に対する回答がなかったため、Symfony2Googleグループからクロスポストされました。

私は次のフォームを持っています:

<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 %}

<div>少し簡単にスタイルを設定できるように、デフォルトの設定をに入れました。

私の問題は、フォームエラーのリストがまったく表示されないことです。<div>のように、HTMLには空がなく、何もありません。{{form_errors(form.email)}}のようなフィールドレベルのエラーのコードを入力すると、表示されます。

私はそれを次のようなもので恨むことができると思います:

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

しかし、それは実際には問題に対処していません。

何か案は?

4

1 に答える 1

3

多分あなたは次のテーマを試すことができます、それは私のために働きます:

{% 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 に設定する必要がある場合があります

(Nb : これは私からのものではありません。これを書いた親切な人を覚えていません)

于 2013-02-07T14:37:22.930 に答える