我从头开始创建一个Symfony2项目,然后安装 FOSUserBundle 。
然后,我写了(实际上,使用ORM Designer生成)一些需要在它们之间和用户实体之间建立关系的实体。
我Items
属于Users
,Collections
属于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的实体与基于FOSUserBundle的User实体的关系,并且仍然能够获得漂亮的命令行生成工具吗?
答案 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
中禁用它们以防止出现副作用。