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

时间:2013-02-20 16:00:01

标签: symfony doctrine-orm fosuserbundle

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

然后,我写了(实际上,使用ORM Designer生成)一些需要在它们之间和用户实体之间建立关系的实体。

Items属于UsersCollections属于Users群组Items,依此类推。

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

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

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

但是,此时,尝试在浏览器中加载登录以前工作的URL(当我只安装了 FOSUserBundle 时)会抛出此错误:

  

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

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

玩弄这些让我到了能够得到表格的地步,但如果我尝试使用新生成的CRUD所涉及的任何网址,那么实际的应用程序就无法工作,因为实体是基于在yml(我删除它以使事情“工作”)它将没有任何映射知识。

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

1 个答案:

答案 0 :(得分:6)

您描述的问题源于混合配置格式(yaml和I假设注释)。您可以通过放弃模型中的注释并使用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" }

其余内容由FOSUserBundle处理,因为BaseModel是mapped-superclass并且已经在User.orm.xml中描述了这些内容,但您也可以替换现有值或添加其他值就像你对你自己的模特一样。

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