Php 上传文件功能未命中symfony2
我面临着一个奇怪的问题:当我想更改用户的profil图片(使用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
<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。。。我会稍后再试,如果有效,我会确认你的答案!谢谢