上传文件功能未命中symfony2


Upload file function not hit 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);
    }
}

你知道为什么吗?我该如何解决这个问题?

谢谢!

文件上传未检测到是原则问题。由于文件上传不直接更改存储文件名的字段,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());

在保存新图像之前尝试先删除旧图像,这可能是一些权限错误,因为它已经存在于我,我总是这样做:

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

否则,您应该检查表单是否有效,上传函数是否按预期运行,并进行一些调试。