Forms 表-I'的验证;我买了两次标签
我有一份登记表-来自FOSUserBundle,这在模板中:Forms 表-I'的验证;我买了两次标签,forms,validation,symfony,twig,Forms,Validation,Symfony,Twig,我有一份登记表-来自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_regist
{% 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>
我刚刚从TwitterBootstrap添加了一些css类
问题是我两次收到了一些验证消息
我的表单有4个字段-用户名、电子邮件、密码、确认密码
我尝试打破尽可能多的验证规则,结果如下:
对于用户名
:
电子邮件
:
密码
:
如果短:
更新 这是
C:\xampp\htdocs\Project\src\Acme\MyBundle\Entity\User.php
在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';
}
}
好的,这是一个已知的问题
让我们看看这里:
解决方案是:为要覆盖的属性的验证规则创建自己的验证组。在validation.xml中,仅放置需要一些不同规则的属性,并在新的验证组上定义验证
因此,对于validation.xml,仅修改实体(Acme\MyBundle\entity\User)的明文密码验证规则:
添加最后一行(“验证组:[注册]”)只会导致一个错误。仅FOSUserBundle验证:“注册”。是否从FOSUserBundle扩展用户实体,是否在扩展实体上重复验证规则?嗯,是的,我想我扩展了它。能否显示实体代码?如果重新定义验证规则,可能会出现双重错误消息…当然可以。我更新了我的问题。:)您更改了翻译文件中的最小长度??我想你改变了其他一些东西来实现这一点。。有什么想法吗?另外,您的捆绑包是否扩展了FOSUserBundle?非常感谢!:)现在它很完美,只是它不适用于使用破折号和RegistrationAcme编写的验证组,所以我将它们更改为[注册,默认值]
和[ProfileAcme,默认值]
对于这个问题,我已经搜索了几个小时的解决方案,终于找到了一个好的、清晰的答案。您好@AlterPHP-您能帮我解决类似的问题吗?我尝试了类似于你上述答案的方法,但未能解决问题。很可能我做错了什么/遗漏了什么。
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
}
}
<?php
namespace Acme\BudgetTrackerBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class AcmeBudgetTrackerBundle extends Bundle
{
public function getParent()
{
return 'FOSUserBundle';
}
}
<?xml version="1.0" ?>
<constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping
http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
<class name="Acme\MyBundle\Entity\User">
<property name="plainPassword">
<constraint name="NotBlank">
<option name="message">fos_user.password.blank</option>
<option name="groups">Registration</option>
</constraint>
<constraint name="Length">
<option name="min">6</option>
<option name="minMessage">fos_user.password.short</option>
<option name="groups">
<value>RegistrationAcme</value>
<value>ProfileAcme</value>
</option>
</constraint>
</property>
</class>
</constraint-mapping>
fos_user:
registration:
form:
validation_groups: [Default, RegistrationAcme]
profile:
form:
validation_groups: [Default, ProfileAcme]
# config.yml
# ...
fos_user:
db_driver: orm
firewall_name: main
user_class: Acme\YourBundle\Entity\User
registration:
form:
type: acme_user_registration
validation_groups: [Registration]
# ...