exception - SonataUserBundle FOSUserBundle UniqueEntity 电子邮件和用户名

标签 exception unique fosuserbundle sonata-admin sonata-user-bundle

我有自己的用户类,它继承了Sonata的BaseUser(Sonata\UserBundle\Entity\BaseUser)

我的问题:如果我尝试使用现有电子邮件从 sonata admin 创建用户,则会出现以下异常:

“无法创建对象:Application\Sonata\UserBundle\Entity\User” SQLSTATE[23505]:唯一违规:7错误:重复的键值违反唯一约束 详细信息: key (email_canonical)=( [email protected] ) 已存在。

我尝试按照某些文档和票证中的建议使用 UniqueEntity 使用正确的使用语句,但无济于事。

我在奏鸣曲管理的其他实体上使用 UniqueEntity 注释没有问题,并且我在表单中收到一条很好的消息,通知用户已经存在具有该名称/标题的实体,而不是异常。但对于 User 实体来说,它的工作方式根本不同。

这就是我在 AppKernel 中注册 sonata 用户包的方式:

new Application\Sonata\UserBundle\ApplicationSonataUserBundle('FOSUserBundle') 

扩展 FOSUserBundle

在自定义用户实体中使用语句(由 EasyExtends bundle 生成,只是我添加了一些自定义列以及与其他实体(例如项目)的一对多关系):

namespace Application\Sonata\UserBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Sonata\UserBundle\Entity\BaseUser as BaseUser;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

这是用户类的注释:

/**
 * User
 *
 * @ORM\Table(name="fos_users")
 * @ORM\Entity
 * @UniqueEntity("username")
 * @UniqueEntity("username_canonical")
 * @UniqueEntity("email")
 * @UniqueEntity("email_canonical")
*/

这是我的 sonata_user 配置:

sonata_user:
    security_acl: true
    manager_type: orm
    class:
        user:  Application\Sonata\UserBundle\Entity\User
        group: Application\Sonata\UserBundle\Entity\Group

这是 fos_user 的配置:

fos_user:
    db_driver:     orm
    firewall_name: admin, user
    user_class:    Application\Sonata\UserBundle\Entity\User
    group:
        group_class:   Application\Sonata\UserBundle\Entity\Group
        group_manager: sonata.user.orm.group_manager
    service:
        user_manager: sonata.user.orm.user_manager

我正在使用自定义管理类

parameters:
    #use custom user admin class
    sonata.user.admin.user.class: Application\Sonata\UserBundle\Admin\Model\UserAdmin

(我也尝试过使用默认的管理类)

这是我的奏鸣曲管理员配置:

奏鸣曲管理员: 安全: 处理程序:sonata.admin.security.handler.acl 标题:我的应用程序 模板: 布局:CoreBundle:Admin:standard_layout.html.twig

我还尝试用我自己的验证规则覆盖validation.yml/validation.xml文件...但它们被忽略或类似的东西...

我没有主意了。如果您能帮助我,我将非常感激。

最佳答案

这对我有用:

<?php
namespace Application\Sonata\UserBundle\Entity;

...
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
...

/**
 * User
 *
 * @ORM\Table(name="user")
 * @ORM\Entity()
 * @UniqueEntity("username")
 * @UniqueEntity("email")
 */
class User extends AbstractedUser implements UserInterface
...

重要的几行:

 * @UniqueEntity("username")
 * @UniqueEntity("email")

关于exception - SonataUserBundle FOSUserBundle UniqueEntity 电子邮件和用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24898855/

相关文章:

php - MySQL:唯一分组

symfony - 如何使用 Doctrine Annotations 更改实体子类中的列名称?

symfony - 使用 symfony 容器服务时代码完成不起作用

c++ - 从 C++ 处理程序捕获时如何获取 Ada 异常消息?

java - 提供的 .class 文件中出现 NoClassDefFoundException

.NET 4.0 WPF 自动化异常

r - aeqSurv(Y) : aeqSurv exception, 中的错误间隔的有效长度为 0

r - 具有set元素的两个字符串列的data.table,提取唯一行,每行未排序

mysql - MySQL索引中的 'name'和 'symbol'是什么?

symfony - 带前缀的 FOSUserBundle 注销不起作用