2015-06-02 16 views
1

我正面臨一個奇怪的問題:當我想更改用戶的配置文件的圖片(使用Symfony2)時,上傳文件的功能不是通話,所以我的照片沒有改變...但是,當我創建用戶(第一次)時,函數被調用並且圖片上傳得很好。上傳文件功能沒有命中symfony2

這裏是我的代碼:

查看:

<div class="btn btn-default image-preview-input"> 
    <span class="glyphicon glyphicon-folder-open"></span> 
    <span class="image-preview-input-title">Choisir une photo de profil</span> 
    {{ form_widget(form.logo) }} 
</div> 

實體:

/** 
* @Assert\File(
*    maxSize="6000000", 
*    mimeTypes={"image/png", "image/jpeg", "image/gif"} 
*) 
* 
*/ 
public $logo; 

上傳功能等上傳:

public function getAbsolutePath() 
{ 
    return null === $this->logo ? null : $this->getUploadRootDir().'/'.$this->id.'.png'; 
} 

protected function getUploadRootDir() 
{ 
    return __DIR__.'/../../../../web/'.$this->getUploadDir(); 
} 

protected function getUploadDir() 
{ 
    return 'uploads/events'; 
} 

/** 
* @ORM\PostPersist() 
* @ORM\PostUpdate() 
*/ 
public function upload() 
{ 
    if (null === $this->logo) { 
     return; 
    } 

    $path = $this->id . '.png'; 

    if(file_exists ($this->getUploadRootDir() . $path)) 
     unlink($this->getUploadRootDir() . $path); 

    $this->logo->move($this->getUploadRootDir(), $path); 

    $this->logo = null; 
} 

/** 
* @ORM\PreRemove() 
*/ 
public function storeFilenameForRemove() 
{ 
    $this->filenameForRemove = $this->getAbsolutePath(); 
} 

/** 
* @ORM\PostRemove() 
*/ 
public function removeUpload() 
{ 
    if ($this->filenameForRemove) { 
     unlink($this->filenameFor Remove); 
    } 
} 

你有什麼想法,爲什麼,我該如何解決它?

謝謝!

回答

1

未檢測到文件上傳是學說問題。由於文件上傳並不直接改變存儲文件名的字段,所以Doctrine認爲該實體保持不變,所以它被忽略。僅當文件上傳被改變時會發生這種情況。

可以標記在控制實體的變化,這樣的:

if ($editForm['fileUpload']->getData() !== null) { 
    $entity->setLogo("logo_".uniqid(mt_rand(), true)); 
} 

或創建實體修改時間的字段,並迫使其改變控制器更新動作:

// force unit of work to detect entity 'changes' 
$entity->setModificationTime(new \DateTime()); 
+0

好的......我會稍後再試,如果有效,我會確認你的答案! 謝謝 – carndacier

0

嘗試保存新的人之前先刪除舊的圖像,也可能是一些權限錯誤,因爲它已經存在了我,我一直沒它喜歡:

 if (isset($this->logo) && $this->logo!= null) { 
      $old_img = $this->getUploadRootDir().'/'.$this->logo; 
      if (file_exists($old_img)) 
       unlink($old_img); 
     } 

否則,你應該檢查的形式是有效的並且上傳功能按照預期的方式運行並進行一些調試。

+0

感謝你的答案,但它已經是我所做的: if(file_exists($ this-> getUploadRootDir()。$ path)) unlink($ this-> getUploadRootDir()。$ path); 我的問題是,這個代碼的功能是從來沒有調用 – carndacier

+0

是真的,那麼下一步是調試,看看問題在哪裏,是有效的形式等。也許一些如果由於某種原因不經過你需要檢查 –