[英]Sonata Media: Change context programmatically
我正在写一个小博客应用程序,用户可以在其中发布公共和私人新闻。 用户可以将文件附加到这些新闻。 这个应用程序有两个上下文: public_news
,每个人都可以访问的文件; 和private_news
,只有在用户登录后才能访问的文件。
当用户将新闻从公共更改为私人时,我希望能够将文件从public_news上下文移至private_news上下文,反之亦然。
我希望做像$media->setContext('private_news');
这样简单的事情$media->setContext('private_news');
,但这不会将物理文件从一个目录移动到另一个目录。
您如何看待这种媒体?
$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);
}
但是在保存新的媒体实体之前不要这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.