私は登録フォームを持っています - 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';
}
}