-->

如何正确删除上传的所有图像采用奏鸣曲媒体捆绑(How to correctly delete all

2019-10-21 00:58发布

我已经上传使用奏鸣曲媒体捆绑一些图像,建议在这里

$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

提前致谢。

Answer 1:

为了能够正确地删除与上传文件的所有媒体,一要利用此时,相应的供应商:

从奏鸣曲媒体文件

提供者类负责处理与媒体资产的共同的东西:

  • 缩略图
  • 路径
  • 编辑媒体与形式
  • 存储的媒体信息(元数据)

因此,代码将如下所示:

$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)


文章来源: How to correctly delete all images uploaded using sonata-media-bundle