Symfony Sonata 媒体包

Posted

技术标签:

【中文标题】Symfony Sonata 媒体包【英文标题】:Symfony Sonata Media Bundle 【发布时间】:2015-12-17 15:54:39 【问题描述】:

情况

我正在使用 Symfony(和 MongoDB 作为数据库)并希望将 Sonata Media Bundle 集成到 Sonata Admin 包中。在添加媒体包之前,一切正常。

我按照 Sonata 网站上的指南进行操作,似乎正确设置了媒体管理包;请看下面的配置

config.yml

doctrine_mongodb:
    connections:
        default:
            server: mongodb://localhost:27017
            options: 
    default_database: test_database
    document_managers:
        default:
            mappings:
              ApplicationSonataMediaBundle: ~
              SonataMediaBundle: ~
            auto_mapping: true
...
sonata_media:
    # if you don't use default namespace configuration
    #class:
    #    media: MyVendor\MediaBundle\Entity\Media
    #    gallery: MyVendor\MediaBundle\Entity\Gallery
    #    gallery_has_media: MyVendor\MediaBundle\Entity\GalleryHasMedia
    default_context: default
    db_driver: doctrine_mongodb # or doctrine_mongodb, doctrine_phpcr
    contexts:
        default:  # the default context is mandatory
            providers:
                - sonata.media.provider.dailymotion
                - sonata.media.provider.youtube
                - sonata.media.provider.image
                - sonata.media.provider.file
            formats:
                small:  width: 100 , quality: 70
                big:    width: 500 , quality: 70

Company.php 文档类

namespace AppBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/**
 * @MongoDB\Document
 */
class Company

    /**
     * @MongoDB\Id
     */
    protected $id;
    /**
     * @MongoDB\String
     */
    protected $title;
    /**
     * @MongoDB\String
     */
    protected $slug;
    /**
     * @MongoDB\ReferenceMany(targetDocument="Application\Sonata\MediaBundle\Document\Media", mappedBy="image")
     */
    protected $logo;

公司管理员.php

->add('logo', 'sonata_type_model_list', array(), array('link_parameters' => array('context' => 'default')))

问题

现在,每当我进入公司管理界面时,都会看到消息“没有为类 Doctrine\ODM\MongoDB\PersistentCollection 定义文档管理器”

我对 Symfony 比较陌生,我真的不知道出了什么问题。请你能帮助在正确的方向戳一下。如果我从管理员中删除徽标,它自然会重新开始工作。请帮忙,这里真的一无所知

【问题讨论】:

【参考方案1】:

如果您使用:auto_mapping: true,则不需要文档管理器默认映射,否则您必须在配置文件中添加:

orm:
#        auto_mapping: true

    entity_managers:
        default:
            connection: default
           # naming_strategy: doctrine.orm.naming_strategy.underscore
            mappings:
                ApplicationSonataUserBundle: ~
                ApplicationSonataMediaBundle: ~
                YourBundle: ~

在 AppKernel.php 中检查 ApplicationSonataMediaBundle() 实例运行命令:

运行应用程序/控制台原则:schema:update --force

也看看这个问题:

How to define/pass the entity manager for sonata-admin

【讨论】:

以上是关于Symfony Sonata 媒体包的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 Sonata Media Bundle -- 上传图片时出错

Symfony 3.2.7 和奏鸣曲媒体包安装

Symfony2 覆盖 Sonata 媒体图像提供程序。(将接口传递给构造函数)

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

Symfony 2.1 Sonata 管理包 OneToMany

一个 Symfony 应用程序中的两个 Sonata 管理面板包