2015-02-07 113 views
2

在媒體實體中實現__clone()方法時,我需要獲取文件的絕對路徑才能夠創建文件本身的副本。我一直在尋找很長一段時間,我還沒有找到任何文件來獲得這個。有任何想法嗎?Symfony 2獲得實體類中的Sonata媒體文件路徑

這是我需要的文件路徑的__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()); 
     } 
} 

回答

3

我不認爲這是有可能不給實體類太多的責任,因爲你不能告訴絕對路徑名稱('sonata.media.manager.media','sonata.media.provider.image'或'sonata.media.twig.extension')。

正確的路要走在控制器中構建一個克隆功能。控制器可以擁有所有的魔法(服務和實體管理者)爲你做克隆。

查看this stackoverflow question爲例。

相關問題