在媒体实体中实现__clone()方法时,我需要获取文件的绝对路径,以便能够复制文件本身。我已经搜索了很长时间,但我没有找到任何文档来获取此信息。有什么想法吗?
这是我需要文件路径的__clone()方法:
// Norwalk\StoreBundle\Entity\ProductHasMedia
public function __clone() {
if ($this->id) {
$this->media = clone $this->media;
$this->media->setProviderReference('clone_'.$this->media->getProviderReference());
$this->media->setName('clone_'.$this->media->getName());
$providerMeta = array('filename' => $this->media->getName());
$this->media->setProviderMetadata($providerMeta);
// Clone the physical image file too
$fs = new Filesystem();
$fs->copy( "original_image_path/".$this->media->getName(), "original_image_path/"."clone_".$this->media->getName());
}
}
答案 0 :(得分:3)
我不认为可以在不给Entity类承担太多责任的情况下实现,因为如果没有一些服务就无法告诉绝对路径名(' sonata.media.manager.media&# 39;,' sonata.media.provider.image'或#sonart.media.twig.extension')..
正确的方法是在控制器中构建克隆功能。控制器可以拥有所有魔法(服务和实体管理员)来为您进行克隆。
有关示例,请参阅this stackoverflow question。