我正在使用symfony.com的食谱文章来实现图片的文件上传选项。
现在我想将其他图片加载到实体。
编辑的默认策略是: 1.取出DB 2.注入表格 3.坚持
当使用文件上传时,该策略不再起作用(doctrine不执行事件)
我还能做些什么才能使图片文章可编辑?
答案 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