我有一个登记表 - 从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个符号。
并重新提交之前,他们两个。
你有为什么一些错误显示两次,如何解决这一问题的任何想法? 非常感谢你提前! :)
UPDATE
这是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';
}
}