Symfony2:编辑文件上传

时间:2012-04-01 08:10:24

标签: file-upload symfony doctrine-orm entity

我正在使用symfony.com的食谱文章来实现图片的文件上传选项。

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

编辑的默认策略是:  1.取出DB  2.注入表格  3.坚持

当使用文件上传时,该策略不再起作用(doctrine不执行事件)

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

3 个答案:

答案 0 :(得分:10)

食谱无法处理更新,特别是在只有文件发生变化的情况下。

在这种情况下,PreUpdate事件未被触发,因此您需要在$entity->preUpload()之前手动触发$em->persist($entity),以便在任何情况下处理文件上传(preUpload将改变$entity->path以便持续发生)

答案 1 :(得分:7)

如果您只更改上传字段,则生命周期不会运行上传方法,在菜单中报告解决方案的报价框如下:

  

只有存在时,才会触发PreUpdate和PostUpdate回调   持久化的实体字段之一的更改。这意味着   默认情况下,如果仅修改$ file属性,则会发生这些事件   不会被触发,因为财产本身不是直接的   通过Doctrine持续存在。一种解决方案是使用更新的字段   这是持久的Doctrine,并在更改时手动修改它   文件。

在持久性事件之前添加一个虚拟字段以在控制器中更新,如此讨论所示:

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

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

答案 2 :(得分:0)

我也遇到过类似情况。 我尝试编辑数据库中具有文件路径的现有记录。 当我编辑记录时,我必须上传新文件,这对用户来说是不舒服的。 在我的解决方案中,我将变量tmp文件用于文件哈希和变量文件名。 我在“动作”编辑类中进行的所有必需操作。

波纹管链接中的完整示例动作类

https://github.com/marekz/php_examples/wiki/Symfony-how-to-edit-attachment-form