如何正确删除使用sonata-media-bundle上传的所有图像

时间:2014-09-19 21:15:51

标签: php symfony sonata-media-bundle

我已按照建议here

使用sonata-media-bundle上传了一些图片
$media = new Media;
$media->setBinaryContent($file->getRealPath());
$media->setContext('myContext'); 
$media->setProviderName('sonata.media.provider.image');
$mediaManager->save($media);

以前的代码正确地创建媒体所有文件(根据上下文配置)和db注册表。现在,我所做的删除媒体的方式就是这样:

$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

提前致谢。

1 个答案:

答案 0 :(得分: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)