Sonata Media Bundle - 如何编写自定义提供程序? [英] Sonata Media Bundle - how to write custom provider?

查看:61
本文介绍了Sonata Media Bundle - 如何编写自定义提供程序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有一个示例关于如何编写自定义提供程序的官方文档,但它不起作用.

There is an example in the official documentation about how to write custom provider, but it doesn't work.

我的问题是:编写自定义提供程序的最佳方法是什么,尤其是如何编写和注册提供程序作为新服务?

My question is: what is the best way to write custom provider, especially how to write and register provider as a new service?

当我尝试使用 这段代码来自文档,我收到关于参数类型的错误.空论是什么意思?

When I try to use this code from documentation, I get errors about type of arguments. What does mean empty argument?

谢谢.

推荐答案

经过一番调查,以下代码有效:

After some investigation, the following code works:

将提供者注册为服务:

// src/Application/Sonata/MediaBundle/Resources/config/services.yml
parameters:
    application_sonata_media.custom_class: Application\Sonata\MediaBundle\Provider\CustomProvider

services:
    sonata.media.provider.custom:
          class: %application_sonata_media.custom_class%
          tags:
              - { name: sonata.media.provider }
          arguments:
              - sonata.media.provider.custom
              - @sonata.media.filesystem.local
              - @sonata.media.cdn.server
              - @sonata.media.generator.default
              - @sonata.media.thumbnail.format

自定义提供商代码:

// src/Application/Sonata/MediaBundle/Provider/CustomProvider.php
<?php

namespace Application\Sonata\MediaBundle\Provider;

use Sonata\MediaBundle\Model\MediaInterface;
use Sonata\MediaBundle\Provider\FileProvider;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\HttpFoundation\File\File;

/**
 * Class CustomProvider
 * @package Application\Sonata\MediaBundle\Provider
 */
class CustomProvider extends FileProvider
{
    /**
     * @param MediaInterface $media
     */
    protected function doTransform(MediaInterface $media)
    {
         // ...
    }

    /**
     * {@inheritdoc}
     */
    public function generatePublicUrl(MediaInterface $media, $format)
    {
        // new logic
    }

    /**
     * {@inheritdoc}
     */
    public function postPersist(MediaInterface $media)
    {
    }

    /**
     * {@inheritdoc}
     */
    public function postUpdate(MediaInterface $media)
    {
    }
}

更新奏鸣曲配置:

// app/config/sonata/sonata_media.yml
sonata_media:
        ...
        product:
            providers:
                - sonata.media.provider.image
                - sonata.media.provider.custom
            formats:
                small: { width: 40 , quality: 100}
        ...

而且我还设置了 DI 扩展来自动加载 services.yml

And I've also setup DI extension to autoload services.yml

我做了一个 PR 来更新过时的文档.

I made a PR to update outdated documentation.

这篇关于Sonata Media Bundle - 如何编写自定义提供程序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆