2012-04-01 88 views
6

我使用symfony.com的食谱文章来实现图像的文件上传选项。Symfony2:编辑文件上传

现在我想加载其他图像到实体。

编辑默认的策略是:1。 取出来DB 2.进样的成晶 3.坚持

不知怎的,使用文件上传时,这种策略不工作了(原则不执行事件)

我还能做些什么来使图片可编辑的文章?

回答

10

食谱不处理更新,特别是在只有文件改变的情况下。

在这种情况下,不会触发PreUpdate事件,所以你需要$em->persist($entity)之前手动触发$entity->preUpload(),使文件上传获取任何情况下处理(preUpload将改变$entity->path所以会出现持续存在)

+0

嗨, 您选择的权利。当没有字段更新时,生命周期回调事件不会被触发:) – bodokaiser 2012-04-02 17:42:52

+0

如果使用Knp DoctrineExtensions,则可以在持有文件上载逻辑的实体上使用Timestampable,并使用$ entity-> updateTimestamps();在$ em-> persist()之前,所以它会更新你需要的虚拟字段;) – 2015-04-30 09:54:47

7

如果你只改变上传字段的生命周期不运行上传方法,在食谱报道在报价框,下面的解决方案:

的更新前和PostUpdate回调才会触发,如果有 变化在一个实体的fie ld是持久的。这意味着 默认情况下,如果您仅修改$ file属性,则不会触发这些事件 ,因为属性本​​身不是直接通过Doctrine持续存在的 。一种解决方案是使用持续到Doctrine的更新字段 ,并在更改 文件时手动对其进行修改。

添加一个虚拟场控制器更新之前坚持的事件本duscussion的建议:

https://github.com/symfony/symfony-docs/pull/564

public function setFile(UploadedFile $file) 
{ 
    $this->file = $file; 
    $this->updatedAt = new \DateTime(); 
}