安装 SonataMediaBundle 后映射异常
Posted
技术标签:
【中文标题】安装 SonataMediaBundle 后映射异常【英文标题】:Mapping exception after install SonataMediaBundle 【发布时间】:2014-03-10 20:10:36 【问题描述】:我正在尝试设置和使用 SonataMediaBundle 以在 SonataAdminBundle 中使用。我阅读并遵循docs for SMB 中的每一步。当我运行命令时:
php app/console sonata:easy-extends:generate SonataMediaBundle
默认情况下,这会在app/
文件夹中创建捆绑包,因此我手动移动到应该在的src/
文件夹中。现在每次我尝试访问我的应用程序时都会收到此错误:
MappingException:类 'Application\Sonata\UserBundle\Entity\User' 在链中找不到 配置命名空间 Sonata\MediaBundle\Entity
我不知道为什么,我到处寻找参考资料,但一无所获。有谁能帮我解决这个问题或给我一个线索?
【问题讨论】:
【参考方案1】:我找到了应有的解决方案:
doctrine:
orm:
auto_generate_proxy_classes: %kernel.debug%
entity_managers:
default:
auto_mapping: true
mappings:
ApplicationSonataMediaBundle: ~
SonataMediaBundle: ~
auto_mapping: true 必须是进到学说、orm、entity_managers、默认部分而不是进到学说、orm。
【讨论】:
【参考方案2】:阅读并尝试了几件事后,我发现了错误所在。在我的学说配置中,我有:
orm:
auto_generate_proxy_classes: "%kernel.debug%"
# auto_mapping: true
entity_managers:
default:
mappings:
ApplicationSonataMediaBundle: ~
SonataMediaBundle: ~
通过删除 auto_mapping 子句,我不再在学说的映射目录中注册 UserBundle。因此它找不到您的用户实体。因此,解决方案是从您的配置中取消注释 auto_mapping: true
并注释 entity_manager.default.mappings
部分,或者在该部分中明确指定您的用户包。所以我选择了第一个,我的代码现在看起来像这样:
orm:
auto_generate_proxy_classes: "%kernel.debug%"
auto_mapping: true
# entity_managers:
# default:
# mappings:
# ApplicationSonataMediaBundle: ~
# SonataMediaBundle: ~
【讨论】:
【参考方案3】:再次删除它并运行以下命令,php app/console sonata:easy-extends:generate --dest=src SonataMediaBundle
...您忘记了--dest=src
,只需移动文件就不会更改所有命名空间。
【讨论】:
我在运行命令后按照您的建议生成了捆绑包:#php app/console doctrine:schema:update --force Updating database schema... Database schema updated successfully! "5" queries were executed
通过删除 app/cache/
文件夹中的所有内容来清除缓存,但错误仍然存在:MappingException: The class 'Application\Sonata\UserBundle\Entity\User' was not found in the chain configured namespaces Application\Sonata\MediaBundle\Entity, Sonata\MediaBundle\Entity
我不知道是什么原因这个,还有什么想法吗?
你能用你的composer.json更新你的问题吗?你真的按照安装instructions,因为schema:update
command是最后的步骤之一......以上是关于安装 SonataMediaBundle 后映射异常的主要内容,如果未能解决你的问题,请参考以下文章