我有一个注册表单 - 来自 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 类。
问题是我两次收到一些验证消息。
我的表单有 4 个字段 -用户名、电子邮件、密码、确认密码
我试图打破尽可能多的验证规则,这是输出:
对于Username
:
- 此用户名已被使用。请选择另一个。
- 用户名太短 - 请输入至少 2 个符号。
- 用户名太短 - 请输入至少 2 个符号。
对于email
:
- 请输入有效电子邮件。
- 请输入有效电子邮件。
如果我输入已使用的电子邮件,则错误仅显示一次:
- 此邮箱已被占用。
对于passwords
:
如果它们很短:
- 密码太短 - 请输入至少 6 个符号。
- 密码太短 - 请输入至少 6 个符号。
如果它们不匹配:
- 输入的密码不匹配。
另一个奇怪的是,当我重新提交表单时,仍然无效,密码长度的通知只有一个:
- 密码太短 - 请输入至少 6 个符号。
在重新提交之前,他们是两个。
您是否知道为什么某些错误会显示两次以及如何解决此问题?非常感谢您!:)
更新
这是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';
}
}