如何正确使用attributeOverride来禁用FOSUserBundle中的用户名和/或密码的“唯一”要求(yaml doctrine configuration)

时间:2016-02-27 13:44:40

标签: symfony doctrine-orm

我在Symfony2项目中使用FOSUserBundle,我想在User实体的用户名和电子邮件字段中禁用“unique”属性。也许这听起来很奇怪,但我正在使用另一个字段组合来确保我的数据库中有唯一(活动)用户,这很好。

现在我已按照以下方式设置User.orm.yml:

MyProjectBundle\Entity\User:
    type:  entity
    attributeOverride:
        usernameCanonical:
            unique: false
        emailCanonical:
            unique: false
    table: fos_user
    id:
        id:
            type: guid
            generator:
                strategy: UUID
    fields:
    etc... etc...

当我使用此设置,并通过控制台创建/更新我的数据库时,UNIQUE索引将从数据库中删除,就像我想要的那样。 YAY!

但是,当我尝试使用

生成项目实体时

doctrine:generate:entities MyProjectBundle

我收到以下错误:

Invalid field override named 'usernameCanonical' for class 'MyProjectBundle\Entity\User'.

所以它没有正确生成我的实体....

现在,我想在生成实体时暂时删除User.orm.yml中的attributeOverride部分,如果我想更新数据库,请将其重新放回。

我的项目使用此解决方法正常工作,但我知道为什么我的attributeOverride无效并且设置正确,我会感觉更舒服......

任何有远见或建议的人?

1 个答案:

答案 0 :(得分:0)

这是实体生成器#3433中的已知错误。它由#1098修正,并由#1231向后移植到2.4。您应该更新到doctrine / orm> = 2.4.8。

(顺便说一下,实体生成器是第一次生成实体,你应该在那之后手动编辑生成的实体。)