Как правильно удалить все изображения, загруженные с помощью sonata-media-bundle

Я загрузил некоторые изображения, используя sonata-media-bundle, как это было предложено Вот

$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

Заранее спасибо.

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]