2

ここで提案されているように、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

前もって感謝します。

4

1 に答える 1

4

アップロードされたファイルに関連するすべてのメディアを正しく削除できるようにするには、適切なプロバイダーを使用する必要があります。

ソナタメディアのドキュメントから

プロバイダー クラスは、メディア アセットに関連する一般的な処理を担当します。

  • サムネイル
  • フォームを使用してメディアを編集する
  • メディア情報(メタデータ)の保存

したがって、コードは次のようになります。

$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)
于 2014-09-22T14:53:24.587 に答える