Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony Sonata媒体包-如何编写自定义提供程序?_Symfony_Provider_Symfony Sonata - Fatal编程技术网

Symfony Sonata媒体包-如何编写自定义提供程序?

Symfony Sonata媒体包-如何编写自定义提供程序?,symfony,provider,symfony-sonata,Symfony,Provider,Symfony Sonata,官方文档中有关于如何编写自定义提供程序的详细说明,但它不起作用 我的问题是:编写自定义提供程序的最佳方式是什么,特别是如何编写并将提供程序注册为新服务 当我试图使用from文档时,我会得到有关参数类型的错误。 什么是空论点 谢谢。经过一些调查,以下代码可以正常工作: 将提供程序注册为服务: // src/Application/Sonata/MediaBundle/Resources/config/services.yml parameters: application_sonata_m

官方文档中有关于如何编写自定义提供程序的详细说明,但它不起作用

我的问题是:编写自定义提供程序的最佳方式是什么,特别是如何编写并将提供程序注册为新服务

当我试图使用from文档时,我会得到有关参数类型的错误。 什么是空论点


谢谢。

经过一些调查,以下代码可以正常工作:

将提供程序注册为服务:

// 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)
    {
    }
}
我还将DI扩展设置为自动加载
services.yml


我做了一次更新过时文档的尝试。

在我将服务完全命名为我要覆盖的服务(sonata.media.provider.image)之前,我无法让它工作


请参见

Hi@borN_free,我正在尝试此代码段,但当我尝试上载文件时,一个get,“此值不应为空。此值不应为空。”3次,所有代码,在参数末尾添加
-['pdf']-['application/pdf',application/x-pdf']
。有办法解决吗?也许示例代码不完整?谢谢
// app/config/sonata/sonata_media.yml
sonata_media:
        ...
        product:
            providers:
                - sonata.media.provider.image
                - sonata.media.provider.custom
            formats:
                small: { width: 40 , quality: 100}
        ...