[英]Symfony - FOSUserBundle registration validation not working
我正在使用FOSUserBundle,我正在尝试验证电子邮件和用户名是否已经存在。 否则我得到MySQL重复输入错误。
我已经扩展了注册表,添加了Registration
验证组。 但仍然没有好处,我总是得到重复的输入错误。
这是我的RegistrationType
类:
class RegistrationType extends BaseType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
"data_class" => "Tsk\FEBundle\Entity\User",
"validation_groups" => array("Registration")
));
}
public function getName()
{
return "tsk_fe_registration_form_type";
}
}
和服务定义:
<parameters>
<parameter key="tsk_fe.registration.form.type.class">Tsk\FEBundle\Form\RegistrationType</parameter>
</parameters>
<services>
<service id="tsk_fe.registration.form.type" class="%tsk_fe.registration.form.type.class%">
<tag name="form.type" alias="tsk_fe_registration_form_type"/>
<argument>%fos_user.model.user.class%</argument>
</service>
</services>
在config.yml
:
fos_user:
db_driver: orm
firewall_name: main
user_class: Tsk\FEBundle\Entity\User
registration:
form:
type: tsk_fe_registration_form_type
最后我的User
实体:
/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
* @ORM\HasLifecycleCallbacks
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
public function __construct()
{
parent::__construct();
}
//..
}
问题出在symfony 2.5验证中,从中更改config.yml
framework:
validation: { enable_annotations: true }
至
framework:
validation:
enable_annotations: true
enabled: true
api: 2.4
它会起作用,对我有帮助
使用symfony 2.5.0,验证API已更改,现在未加载特定于存储的验证 。 要么降级到最新的2.4版本,要么只是作为解决方法,将唯一约束复制到您的实体:
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
* @ORM\HasLifecycleCallbacks
*
* @UniqueEntity(fields="usernameCanonical", errorPath="username", message="fos_user.username.already_used", groups={"Registration", "Profile"})
* @UniqueEntity(fields="emailCanonical", errorPath="email", message="fos_user.email.already_used", groups={"Registration", "Profile"})
*/
class User extends BaseUser
{
// your stuff
}
在我阅读升级文档之前,我遇到了同样的问题https://github.com/symfony/symfony/blob/master/UPGRADE-2.5.md
我在配置中明确地将我的验证器设置为true,清除了我的缓存,这解决了这个问题:
之前
framework:
validation: { enable_annotations: true }
后
framework:
validation: { enabled: true, enable_annotations: true }
此外,请确保在您的实体上设置usernameCononical和emailCononical,因为这是约束所针对的。
我希望这有帮助。
或者在降级Symfony之前,您可以尝试在config.yml
设置validation
api
:
framework:
validation:
enabled: true
api: auto
这可能会处理向后验证。 Symfony 2.5中ValidatorConstraint的问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.