0

FOSUserBundle を使用してユーザーを登録しています。ただし、エラーは奇妙な場所に表示されます。

ユーザー名や電子メールではなく、パスワードフィールドの行に表示されています

フォームエラー

ご覧のとおり、エラーはユーザー名や電子メールではなく、パスワードの横に表示されます。HTML は、エラーがユーザー名行の下部だけでなく、パスワード行内にあることを示しています。

どうしてこれなの?

これを使用fields.html.twigして追加しました。

{% block form_row %}
    {% spaceless %}
        <div class="form-group">           
            {{ form_errors(form) }}         
            {{ form_label(form) }}
            {{ form_widget(form) }}
        </div>
    {% endspaceless %}
{% endblock form_row %}

これは機能しますが、エラーはすべてパスワードform-groupdiv 内に表示されます。

ビューファイルは次のようになりますResources/views/Registration/register_content.html.twig

<form role="form" action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST" class="form-horizontal fos_user_registration_register">
    {{ form_widget(form) }}

    <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
            <input type="submit" class="btn btn-info" value="{{ 'registration.submit'|trans }}" />
        </div>
    </div>
</form>

それらをそれぞれの div に移動したり、フォームの先頭に移動したりするにはどうすればよいですか?

この validation.yml ファイルもありますが、これは注目に値するかもしれません

FOS\UserBundle\Model\User:
    constraints:
        - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: {fields: username, message: "This username is taken" }
        - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: {fields: email, message: "This email is taken" }
4

2 に答える 2

1

{{ form_errors(form) }}フォームに添付されたエラーをレンダリングします。そして{{ form_errors(form) }}前回紹介した の中に展示されていpassword divます。

error_bubblingフォーム フィールドを true に設定しているようです。要素の横にエラーを表示したい場合は、 を使用しないでくださいerror_bubbling

また、Resources/views/Registration/register_content.html.twigテンプレート内でフィールドを個別にレンダリングすることもできます。削除して次のようfields.html.twigに変更Resources/views/Registration/register_content.html.twigします。

<form role="form" action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST" class="form-horizontal fos_user_registration_register">

    {{ form_errors(form) }}

    <div class="form-group">
        {{ form_errors(form.email) }}
        {{ form_label(form.email) }}
        {{ form_widget(form.email) }}
    </div>

    <div class="form-group">
        {{ form_errors(form.username) }}
        {{ form_label(form.username) }}
        {{ form_widget(form.username) }}
    </div>

    <div class="form-group">
        {{ form_label(form.plainPassword.first) }}
        {{ form_widget(form.plainPassword.first) }}
        {{ form_errors(form.plainPassword.first) }}
    </div>

    <div class="form-group">
        {{ form_label(form.plainPassword.second) }}
        {{ form_widget(form.plainPassword.second) }}
        {{ form_errors(form.plainPassword.second) }}
    </div>

    <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
            <input type="submit" class="btn btn-info" value="{{ 'registration.submit'|trans }}" />
        </div>
    </div>

    {{ form_rest(form) }}

</form>
于 2014-06-25T18:45:50.277 に答える
1

現在の Symfony 2.5には検証グループに関するバグがあり、私は夢中になりました。この質問を参照してください。で以前の検証 API を適用することで、これを修正できますconfig.yml

framework:
    validation:
        enable_annotations: true
        api: 2.4 # default is auto which sets broken API 2.5

私の正気を救ってくれた @gremo に感謝します。

于 2014-07-07T11:42:53.537 に答える