SonataMediaBundle 与自定义实体一起使用

Posted

技术标签:

【中文标题】SonataMediaBundle 与自定义实体一起使用【英文标题】:SonataMediaBundle Usage with custom entities 【发布时间】:2013-06-13 07:57:02 【问题描述】:

我正在使用 Symfony2 和 Sonata 捆绑包(Sonata-Admin 和 Sonata-Media)来开发我的 CMS 项目。

我为我的自定义包设置了我的管理类,它运行良好。我需要将图像附加到我的实体中并在他们的用户页面中查看它们。但是我在自定义实体中使用 SonataMediaBundle 时遇到问题。我正在尝试向我的实体类的 AdminController 添加一个字段,并在我的实体定义中创建一个 manyToOne 关系。

我从来没有得到它的工作,通常给出“找不到实体”异常(Doctrine\ORM\EntityNotFoundException 类)

我找不到除了SonataMedia Documentation 的文章,也无法解决这个问题。有没有人知道一篇好文章来阅读和理解 SonataMedia Bundle 的整个概念?

关于我的代码的更多信息如下:

MyEntity.orm.yml

PRJ\Bundle\PRJBundle\Entity\MyEntity:
type: entity
table: my_table
fields:
    id:
        id: true
        type: integer
        unsigned: false
        nullable: false
        generator:
            strategy: IDENTITY

# Other fields eliminated

manyToOne:
    picture:
        targetEntity: Application\Sonata\MediaBundle\Entity\Media
        joinColumns:
                name: Picture_id
                referencedColumnName: id
        orphanRemoval: false
lifecycleCallbacks:   

实际上,此代码在管理面板和用户页面上都有效,但当管理员用户正在编辑记录或输入新记录时,我无法使其在管理页面上工作。

如果我错了也请纠正我,我假设我可以为我的自定义实体生成一个管理类,该实体附加图片。我将添加一个字段并将其定义为我数据库中 media__media 表的外键,并在我的实体上创建必要的定义。最后,我将能够在创建新实体时通过 SonataMediaBundle 上传新图片。管理员用户将输入实体详细信息并按下上传按钮并选择一张图片,上传按钮适用于 SonataMedia 包并将图像上传到 SonataMedia 包的表中,新记录将在我的包的表中创建并与新创建的媒体相关联。

我希望我能很好地描述我的问题,谢谢。

【问题讨论】:

【参考方案1】:

如果您在 SonataMediaBundle 中使用自定义实体类,则需要在 config.yml 中指定它们:

sonata_media:
    class: 
        media: MyVendor\MediaBundle\Entity\Media
        gallery: MyVendor\MediaBundle\Entity\Gallery
        gallery_has_media: MyVendor\MediaBundle\Entity\GalleryHasMedia

【讨论】:

以上是关于SonataMediaBundle 与自定义实体一起使用的主要内容,如果未能解决你的问题,请参考以下文章

SonataMediaBundle - 如何使用自定义文件输入

关于反射与自定义注解的一些使用

Sonata Media Bundle 缺少实体类别

NSManagedObjectID 与自定义 UUID 标识符属性 - 获取性能

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

UICollectionViewCell 与自定义 UICollectionViewLayout 仅在一个子视图上创建视差动画