Sonata media bundle 如何启用 pixlr 编辑?

Posted

技术标签:

【中文标题】Sonata media bundle 如何启用 pixlr 编辑?【英文标题】:Sonata media bundle how to enable pixlr editing? 【发布时间】:2018-12-01 03:28:49 【问题描述】:

我已按照here 的描述启用了 pixlr,但未启用已尝试多次。 媒体表单中没有显示 pixlr 按钮的编辑。

我是否错过了什么,长期挣扎。请帮忙, 除此之外还有其他配置吗?

这是我的配置

sonata_media:
    pixlr:
        enabled:  true
        secret:   theSecretHash
        referrer: Demo

    # if you don't use default namespace configuration
    class:
        media: App\Application\Sonata\MediaBundle\Entity\Media
        gallery: App\Application\Sonata\MediaBundle\Entity\Gallery
        gallery_has_media: App\Application\Sonata\MediaBundle\Entity\GalleryHasMedia
        category: App\Application\Sonata\ClassificationBundle\Entity\Category

    db_driver: doctrine_orm # or doctrine_mongodb, doctrine_phpcr it is mandatory to choose one here
    default_context: default # you need to set a context
    contexts:
        default:  # the default context is mandatory
            providers:
                - sonata.media.provider.dailymotion
                - sonata.media.provider.youtube
                - sonata.media.provider.image
                - sonata.media.provider.file
                - sonata.media.provider.vimeo

            formats:
                small:  width: 100 , quality: 70 
                big:    width: 500 , quality: 70             
        gallery: 
            providers:
                - sonata.media.provider.dailymotion
                - sonata.media.provider.youtube
                - sonata.media.provider.image
                - sonata.media.provider.file
                - sonata.media.provider.vimeo
            formats:
                original:  width: 500, quality: 100 
                thumbnail:  width: 200, height: 200, quality: 100 

    cdn:
        server:
            path: http://127.0.0.1:8000/uploads/media # http://media.sonata-project.org/

    filesystem:
        local:
            directory:  "%kernel.root_dir%/../public/uploads/media" #flex
            #directory:  "%kernel.root_dir%/../web/uploads/media" #non-flex
            create:     false

【问题讨论】:

【参考方案1】:

深入研究代码后,我发现问题在于 Symfony 4 默认将服务设为私有。

这就是奏鸣曲媒体包启用 pixlr 的方式

首先它检查sonata.media.extra.pixlr 服务是否在容器中可用。 如果没有,那么它不会启用 pixlr。由于该服务是私有容器,因此无法访问该服务。

// Sonata\MediaBundle\Twig\GlobalVariable

/**
 * @return Pixlr|bool
 */
public function getPixlr()

    return $this->container->has('sonata.media.extra.pixlr') ? $this->container->get('sonata.media.extra.pixlr') : false;

解决方法是覆盖服务定义并将其公开:)

sonata.media.extra.pixlr:
    public: true
    class: Sonata\MediaBundle\Extra\Pixlr
    arguments: [~,~,"@sonata.media.pool", "@sonata.media.manager.media", "@router", "@sonata.templating", "@service_container"]

现在您可以看到媒体表单中启用了 pixlr 编辑按钮

【讨论】:

以上是关于Sonata media bundle 如何启用 pixlr 编辑?的主要内容,如果未能解决你的问题,请参考以下文章

Sonata Media Bundle:访问媒体网址

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

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

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

集成 Sonata Media Bundle(媒体实体)和 Sonata Classiffication Bundle(标签实体)

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