私は登録フォームを持っています - FOSUserBundle からこれはテンプレートにあります:
{% form_theme form 'AcmeMyBundle:Form:errors.html.twig' %}
   <form class="big-spacer" action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST" class="fos_user_registration_register">
        {{ form_widget(form) }}
        <div>
            <input class="btn little-spacer" type="submit" value="{{ 'registration.submit'|trans({}, 'FOSUserBundle') }}" />
        </div>
    </form>
ここにあるerrors.html.twig:
{% block field_errors %}
    {% spaceless %}
        {% if errors|length > 0 %}
            <ul class="little-spacer nav text-error">
                {% for error in errors %}
                    <li>{{loop.index}}. {{ error.messageTemplate|trans(error.messageParameters, 'validators') }}</li>
                {% endfor %}
            </ul>
        {% endif %}
    {% endspaceless %}
{% endblock field_errors %}
TwitterBootstrap からいくつかの css クラスを追加しました。
問題は、検証のメッセージの一部を 2 回受け取ることです。
私のフォームには 4 つのフィールドがあります -ユーザー名、電子メール、パスワード、パスワードの確認
できる限り多くの検証ルールを破ろうとしましたが、出力は次のとおりです。
の場合Username:
- このユーザー名は既に使用されています。別のものを選択してください。
- ユーザー名が短すぎます - 少なくとも 2 つの記号を入力してください。
- ユーザー名が短すぎます - 少なくとも 2 つの記号を入力してください。
の場合email:
- 正しいメールアドレスを入力してください。
- 正しいメールアドレスを入力してください。
既に使用されている電子メールを入力すると、エラーは 1 回だけ表示されます。
- このメールは既に使用されています。
そしてのためにpasswords:
短い場合:
- パスワードが短すぎます - 6 つ以上の記号を入力してください。
- パスワードが短すぎます - 6 つ以上の記号を入力してください。
そして、それらが一致しない場合:
- 入力したパスワードが一致しません。
もう 1 つの奇妙な点は、フォームを再送信しても有効ではなく、パスワードの長さに関する通知が 1 つしか表示されないことです。
- パスワードが短すぎます - 6 つ以上の記号を入力してください。
再送信する前は 2 人でした。
一部のエラーが 2 回表示される理由と、これを修正する方法について何か考えはありますか? 事前にどうもありがとうございました!:)
アップデート
これはC:\xampp\htdocs\Project\src\Acme\MyBundle\Entity\User.php
namespace Acme\MyBundle\Entity;
use FOS\UserBundle\Entity\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;
    public function __construct()
    {
        parent::__construct();
        // your own logic
    }
}
そしてC:\xampp\htdocs\Project\app\Resources\FOSUserBundle\translations\、ファイルをコピーしてvalidators.en.yml、その部分を削除し[-Inf, Inf]、メッセージを少し変更しました。
検証ファイルもオーバーライドしました-ここにコピーしました:
C:\xampp\htdocs\Project\src\Acme\MyBundle\Resources\config\validation.xml
パスワードの最小長のみを変更しました。それ以外は元のファイルと同じです。
私のバンドルは FOSUserBundle を拡張します:
C:\xampp\htdocs\Project\src\Acme\MyBundle\AcmeMyBundle.phpこのファイルには次のものが含まれます。
<?php
namespace Acme\BudgetTrackerBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class AcmeBudgetTrackerBundle extends Bundle
{
    public function getParent() 
    {
        return 'FOSUserBundle';
    }
}