2014-09-19 42 views
1

我已經使用了奏鳴曲媒體捆綁上傳了一些圖片,建議here如何正確刪除所有圖像採用奏鳴曲媒體捆綁

$media = new Media; 
$media->setBinaryContent($file->getRealPath()); 
$media->setContext('myContext'); 
$media->setProviderName('sonata.media.provider.image'); 
$mediaManager->save($media); 

前面的代碼創建了媒體正確的所有文件(根據上傳上下文配置)和數據庫註冊表。現在我做了什麼,刪除媒體呼籲這樣的:

$media = $mediaManager->findOneBy(array('id' => $id)); 
$mediaManager->delete($media) 

它正確地將刪除數據庫中的媒體數據而不是從配置文件系統,還有相關的媒體上傳一些圖片。我使用的是S3文件系統的規劃,所以我需要

最相關的我的奏鳴曲配置與同一框架全部刪除(使用建議太)是這樣的:

sonata_media: default_context: default db_driver: doctrine_orm class: media: MyApp\MediaBundle\Entity\Media gallery: MyApp\MediaBundle\Entity\Gallery gallery_has_media: MyApp\MediaBundle\Entity\GalleryHasMedia contexts: default: providers: - sonata.media.provider.youtube - sonata.media.provider.image - sonata.media.provider.file formats: small: { width: 200, quality: 77} myContext: providers: - sonata.media.provider.image formats: normal: { width: 350, quality: 75} tmb: { width: 100, quality: 75} filesystem: local: directory: %kernel.root_dir%/../web/uploads/media create: false

謝謝提前。

回答

3

爲了能夠正確地刪除與上傳文件中的所有媒體,一要利用此時,相應的供應商:

從奏鳴曲媒體documentation

提供者類是負責處理共同的東西,相關媒體資產:

  • 縮略圖
  • 路徑
  • 編輯媒體與形式
  • 存儲的媒體信息(元數據)

因此,代碼看起來像:

$media = $mediaManager->findOneBy(array('id' => $id)); 
//assuming you have access through $this->get to the service container 
$provider = $this->get($media->getProviderName()); 
$provider->removeThumbnails($media); 
$mediaManager->delete($media) 
相關問題