Php 上传文件功能未命中symfony2

Php 上传文件功能未命中symfony2,php,symfony,entity,Php,Symfony,Entity,我面临着一个奇怪的问题:当我想更改用户的profil图片(使用Symfony2)时,上传文件的功能是不调用的,因此,我的图片没有更改。。。但是,当我创建用户(第一次)时,函数被调用,图片被很好地上传 这是我的密码: 查看: <div class="btn btn-default image-preview-input"> <span class="glyphicon glyphicon-folder-open"></span> <span

我面临着一个奇怪的问题:当我想更改用户的profil图片(使用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);
    }
}
上传功能和其他上传功能:

<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);
    }
}
你知道为什么吗?我该怎么解决


谢谢

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

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

否则,您应该检查表单是否有效,以及上载功能是否按预期运行,并进行一些调试。

未检测到文件上载是一个问题。由于文件上传不是直接改变文件名存储的字段,所以认为实体不变,所以忽略它。当只更改文件上载时会发生这种情况

您可以在控制器中标记实体更改,如下所示:

if ($editForm['fileUpload']->getData() !== null) {
    $entity->setLogo("logo_".uniqid(mt_rand(), true));
}
或者为实体修改时间创建一个字段,并在控制器更新操作时强制更改该字段:

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

谢谢你的回答,但我已经这么做了:如果(文件_存在($this->getUploadRootDir().$path))取消链接($this->getUploadRootDir().$path);我的问题是,这个代码所在的函数从来都不是真的,然后下一步是调试,看看问题出在哪里,表单是否有效等等。。也许有些因为某种原因没有通过,你需要检查OK。。。我会稍后再试,如果有效,我会确认你的答案!谢谢