Symfony 2在Entity类中获取Sonata媒体文件路径

时间:2015-02-07 11:38:03

标签: symfony sonata-admin sonata-media-bundle sonata

在媒体实体中实现__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());
        }
}

1 个答案:

答案 0 :(得分:3)

我不认为可以在不给Entity类承担太多责任的情况下实现,因为如果没有一些服务就无法告诉绝对路径名(' sonata.media.manager.media&# 39;,' sonata.media.provider.image'或#sonart.media.twig.extension')..

正确的方法是在控制器中构建克隆功能。控制器可以拥有所有魔法(服务和实体管理员)来为您进行克隆。

有关示例,请参阅this stackoverflow question