2013-07-13 73 views

回答

7

經過一番調查後,下面的代碼工作:

註冊商作爲服務:

// 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

我做了一個PR來更新過時的文檔。

+0

嗨@borN_free,我想這段代碼,但是當我嘗試上傳一個文件時,一個get,**「這個值不應該爲null,這個值不應該是空白的。」** 3次,所有代碼都加上' - ['pdf' ] - ['application/pdf','application/x-pdf']'在參數結尾處。任何想法來解決它?示例代碼可能不完整?謝謝 –

+0

已解決[here](http://stackoverflow.com/a/35833861/5763965) –