5

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

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

我有Items属于UsersCollections属于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 文件创建实体。

但是,此时,尝试在浏览器中加载登录之前工作的 url(当我只安装了FOSUserBundle时)将引发此错误:

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

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

处理这些让我达到了可以获取表格的程度,但是如果我尝试使用涉及新生成的 CRUD 的任何 url,则实际应用程序将无法工作,因为实体基于 ​​yml (我删除它以使事情“工作”)它不会有任何映射知识。

这本质上是错误的吗?让基于 yml 的实体与基于 FOSUserBundle 的用户实体相关联,并且仍然能够获得不错的命令行生成工具?

4

1 回答 1

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" }

其余的东西由 FOSUserBundle 处理,因为 BaseModel 是一个映射超类,并且已经描述了User.orm.xml.

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

于 2013-02-20T19:30:58.697 回答