このメディアを再作成することについてどう思いますか?
$oldMedia = getYourOldMedia();
// $media = clone($oldMedia); # For me it didn't work as expected
# YMMV - I didn't spend lots wondering about that
$media = new Media();
// This will work fine with image and file provider,
// but it was not tested with other providers
$pool = $container->get('sonata.media.pool');
$provider = $pool->getProvider($oldMedia->getProviderName());
$media->setBinaryContent($provider->getReferenceFile($oldMedia));
}
$media->setProviderName($oldMedia->getProviderName());
$media->setContext('private_news');
/* copy any other data you're interested in */
$mediaManager->save($media);
$mediaManager->delete($oldMedia);
$mediaManager->delete
プロバイダーによっては物理ファイルを削除できない場合があります。必要に応じて独自のプロバイダーを作成することをお勧めします。
編集:
さらに調査したところ、古いメディアを削除する前にファイルを手動で削除できることがわかりました。
if ($pool->getFilesystem()->has($path)) {
$pool->getFilesystem()->delete($path);
}
ただし、新しいメディア エンティティを保存する前にそれを行わないでください。