Я загрузил некоторые изображения, используя 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
Заранее спасибо.
Чтобы правильно удалить все файлы мультимедиа, относящиеся к загруженному файлу, необходимо использовать подходящего поставщика:
из сонаты СМИ документация
Класс провайдера отвечает за обработку общих вещей, связанных с медиа активом:
- эскизы
- дорожка
- редактирование СМИ с помощью формы
- хранение медиа-информации (метаданных)
Таким образом, код будет выглядеть так:
$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)
Других решений пока нет …