我在使用Doctrine持久化实体后尝试调整图像大小。在我的实体代码中,我在刷新和更新之前将字段设置为特定值:
/**
* @ORM\PrePersist()
* @ORM\PreUpdate()
*/
public function preUpload()
{
if (null !== $this->getFile()) {
// do whatever you want to generate a unique name
$filename = sha1(uniqid(mt_rand(), true));
$this->image = $filename.'.png';
}
}
因此应该更新图像字段。 然后在我的控制器中,我想做我的调整工作:
if ($form->isValid())
{
$em->persist($activite);
$em->flush();
//resize the image
$img_path = $activite->getImage();
resizeImage($img_path);
}
但是,在代码的这一点上,$ activite-> image的值仍为null。我怎样才能获得新值?
(一切都在数据库中保存得很好。)
答案 0 :(得分:3)
EntityManager
有一个refresh()
方法,可以使用数据库中的最新值更新您的实体。
$em->refresh($entity);
答案 1 :(得分:0)
我发现了我的错误。
实际上,我正在学习本教程:http://symfony.com/doc/current/cookbook/doctrine/file_uploads.html
并且在某些时候他们给这个代码设置文件:
public function setFile(UploadedFile $file = null)
{
$this->file = $file;
// check if we have an old image path
if (isset($this->path)) {
// store the old name to delete after the update
$this->temp = $this->path;
$this->path = null;
} else {
$this->path = 'initial';
}
}
然后在上传后,在第一个版本(随机文件名)中,他们执行:
$this->file = null;
但是在第二个版本中,此代码替换为:
$this->setFile(null);
我的问题是我已经尝试了两个版本,最终回到第一个版本。但是,我忘了更改行以将文件设置为null,因此每次我的路径字段都重置为null。
对于这种荒谬感到抱歉,感谢您的帮助。