与基于yml的实体相关使用FOSUserBundle

cba*_*scu 5 symfony doctrine-orm fosuserbundle

我从头开始了一个Symfony2项目,然后安装了FOSUserBundle.

然后,我编写了(实际上,使用ORM Designer生成)一些需要在它们之间以及与User实体之间建立关系的实体.

Items属于Users,Collections属于Users该组Items,等等.

由于我使用了FOSUserBundle,我只有一个基本的用户类(https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/index.md,步骤3a),使用注释定义,没有config/doctrine文件夹,也没有User.yml文件.

然后我创建了MyBundle/Resources/config/doctrine文件夹并添加了yml上面提到的文件.

当我尝试使用命令行工具生成实体时,一切正常:它将从我的yml文件创建实体.

然而,在这一点上,试图加载在浏览器在登录以前工作时(我只用了网址FOSUserBundle安装)将抛出这个错误:

MappingException:没有为类'X\MyBundle\Entity\User'找到名为'/var/www/concert/src/X/MyBundle/Resources/config/doctrine/User.orm.yml'的映射文件.

只要*.orm.ym文件config/doctrine夹中有l文件,以下操作(例如生成CRUD逻辑)将无法工作.如果我删除它们,CRUD生成将工作,但生成实际的mysql表不会.

玩弄这些让我到了一个点,我也可以得到表,但如果我尝试使用新生成的CRUD所涉及的任何url,那么实际的应用程序不起作用,因为实体基于yml(我删除它以使事情"工作")它将没有任何映射知识.

这本质上是错误的吗?要使基于yml的实体与基于FOSU​​serBundle的用户实体相关联,并且仍然能够获得漂亮的命令行生成工具?

dbr*_*ann 6

您描述的问题源于混合配置格式(yaml和我假设注释).您可以通过放弃模型中的注释并使用yaml文件替换它们来轻松解决此问题,就像您在自己的模型中所做的那样.

不幸的是,FOSUserBundle-docs只显示如何使用注释,因此当您的X\MyBundle\Entity\User扩展FOSUSerBundle的UserEntity时,这里是对yaml格式的快速转换:

X\MyBundle\Entity\User:
    type:  entity
    table: fos_user
    id:
        id:
            type: integer
            strategy: { generator: "AUTO" }
Run Code Online (Sandbox Code Playgroud)

其余的东西由FOSUserBundle处理,因为BaseModel是一个映射超类,并且已经描述了它中的内容User.orm.xml,但您也可以替换现有值或添加其他值,就像您对自己的模型一样.

如果您不在整个应用程序中使用注释,您可能还需要在您的应用程序中禁用它们app/config/config.yml以防止副作用.