Sonata Media Bundle 缺少实体类别

Posted

技术标签:

【中文标题】Sonata Media Bundle 缺少实体类别【英文标题】:Sonata Media Bundle missing entity Category 【发布时间】:2016-11-28 20:30:48 【问题描述】:

我尝试按照以下指南将 Sonata Media Bundle 安装到 Symfony CMF:https://sonata-project.org/bundles/media/3-x/doc/reference/installation.html。这个命令

php app/console sonata:easy-extends:generate --dest=src SonataMediaBundle

用几个实体创建一个全新的包ApplicationSonataMediaBundle

图库 GalleryHasMedia 媒体

但是当我想进行下一步时,我得到实体类别不存在的错误:

app/console doctrine:schema:update --force

这是完整的错误:

[Doctrine\ORM\Mapping\MappingException]                                                                                                  
  The target-entity Application\Sonata\ClassificationBundle\Entity\Category cannot be found in 'Application\Sonata\MediaBundle\Entity\Med  
  ia#category'.

有人可以帮我解决这个问题吗?

提前致谢。

更新:

# sonata_classification.yml:

sonata_classification:
    # ...

doctrine:
    orm:
        entity_managers:
            default:
                #metadata_cache_driver: apc
                #query_cache_driver: apc
                #result_cache_driver: apc
                mappings:
                    #ApplicationSonataClassificationBundle: ~
                    SonataClassificationBundle: ~

【问题讨论】:

分类包安装注册了吗? new Sonata\ClassificationBundle\SonataClassificationBundle(), .. 是的 看起来你不是唯一一个:github.com/sonata-project/SonataMediaBundle/issues/1084。这可能是一个错误。 我明白了.. 感谢您的更新。 【参考方案1】:

我必须设置此配置选项才能使其工作:

sonata_media:
    class:
        media: Application\MediaBundle\Entity\Media
        gallery: Application\MediaBundle\Entity\Gallery
        gallery_has_media: Application\MediaBundle\Entity\GalleryHasMedia
    # ...

还有:

doctrine_phpcr:
    # ...

    odm:
        auto_mapping: true
        mappings:
            SonataMediaBundle:
                prefix: Sonata\MediaBundle\PHPCR
            ApplicationSonataMediaBundle:
                prefix: Application\Sonata\MediaBundle\PHPCR

【讨论】:

【参考方案2】:

我在安装新闻包后遇到了同样的问题(它带来了分类和媒体包)。我在新闻之前配置了媒体和分类,并收到与 OP 相同的错误。查看代码后,我注意到媒体包允许为类别指定另一个类。这为我停止了错误。

sonata_media:
    class:
        # my own bundle namespaces for media and classification bundles
        media: Application\Sonata\MediaBundle\Entity\Media
        gallery: Application\Sonata\MediaBundle\Entity\Gallery
        gallery_has_media: Application\Sonata\MediaBundle\Entity\GalleryHasMedia
        category: Application\Sonata\ClassificationBundle\Entity\Category

【讨论】:

【参考方案3】:

看起来您只需要按照the classification docs 中的说明创建一个sonata_classification.yml 文件

【讨论】:

感谢greg0ire,我将给定的示例复制并粘贴到该文件中。你可以在我的第一篇文章中阅读它。应该够了吧? 我不确定。试试看,我们会看到的。 如果我在 config.yml 中包含 sonata_classification.yml,那么我可以请求 cmf 页面。如果我不包含它,那么当我想更新数据库时会出现与 cli 上相同的错误,但随后是实体媒体而不是实体类别。 要么包含它,要么确保它已加载。 哦,好的。两个实体都生成了吗?如果是,是否也生成了他们的映射?你能检查一下吗?【参考方案4】:

我解决了这个问题:

// app/AppKernel.php
public function registerBundles()

    return array(
        // ...
        new Application\Sonata\ClassificationBundle\ApplicationSonataClassificationBundle(),
        // ...
    );

php bin/console doctrine:schema:update --force

【讨论】:

以上是关于Sonata Media Bundle 缺少实体类别的主要内容,如果未能解决你的问题,请参考以下文章

Symfony Sonata Media Bundle 向用户添加图像/视频

Sonata Media Bundle - 如何按 ID 获取图像或画廊

API 平台 Sonata Media Bundle Gallery - 循环参考

如何在 Sonata Media Bundle 中实现多对多关系

如何正确删除使用 sonata-media-bundle 上传的所有图像

Sonata Media Bundle 与 Sonata Admin Bundle 3.0(或 2.4)