我有自己的用户类,它继承了Sonata的BaseUser (Sonata\UserBundle\Entity\BaseUser)
。
我的问题:如果我尝试使用现有电子邮件从sonata admin创建用户,我会收到以下异常:
“无法创建对象:Application \ Sonata \ UserBundle \ Entity \ User” SQLSTATE [23505]:唯一违规:7错误:重复键值违反唯一约束 详细信息:密钥(email_canonical)=(test@test.com)已存在。
我尝试按照某些文件中的建议使用&使用正确的使用语句使用UniqueEntity,但无济于事。
我在sonata admin的其他实体上使用UniqueEntity注释没有问题,我在表单中收到一条好消息,通知用户已经有一个具有该名称/标题的实体而不是异常。但对于用户实体,它的工作方式并不相同。
这是我在AppKernel中注册奏鸣曲用户包的方式:
new Application\Sonata\UserBundle\ApplicationSonataUserBundle('FOSUserBundle')
扩展FOSUserBundle
在自定义用户实体中使用语句(由EasyExtends包生成,只是我添加了一些自定义列以及与ex:Project等其他实体的一对多关系):
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: 安全: handler:sonata.admin.security.handler.acl 标题:我的应用程序 模板: layout:CoreBundle:Admin:standard_layout.html.twig
我还试图用我自己的验证规则覆盖validation.yml / validation.xml文件......但是它们被忽略或类似的东西......
我没有想法。如果你能帮助我,我将非常感激。
答案 0 :(得分:1)
这使它对我有用:
<?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")