3

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

1 回答 1

4

我认为不给 Entity 类赋予太多责任是不可能的,因为如果没有一些服务('sonata.media.manager.media'、'sonata.media.provider.image'或'sonata.media.twig.extension')..

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

有关示例,请参阅此 stackoverflow 问题。

于 2015-04-26T19:46:59.303 回答