【发布时间】:2012-04-15 07:31:46
【问题描述】:
我正在使用来自 symfony.com 的食谱文章来实现图像的文件上传选项。
现在我想将其他图像加载到实体中。
默认的编辑策略是: 1.从数据库中取出 2.注入表格 3.坚持
不知何故,当使用文件上传时,这种策略不再起作用(学说不执行事件)
我还能做些什么来使带有图片的文章可编辑?
【问题讨论】:
标签: file-upload symfony doctrine-orm entity
我正在使用来自 symfony.com 的食谱文章来实现图像的文件上传选项。
现在我想将其他图像加载到实体中。
默认的编辑策略是: 1.从数据库中取出 2.注入表格 3.坚持
不知何故,当使用文件上传时,这种策略不再起作用(学说不执行事件)
我还能做些什么来使带有图片的文章可编辑?
【问题讨论】:
标签: file-upload symfony doctrine-orm entity
说明书不处理更新,特别是在只有文件更改的情况下。
在这种情况下,PreUpdate 事件不会被触发,因此您需要在$em->persist($entity) 之前手动触发$entity->preUpload(),以便在任何情况下都可以处理文件上传(preUpload 会改变$entity->path 所以会发生持久化)
【讨论】:
如果您仅更改上传字段生命周期不运行上传方法,则在说明书中的报价框中报告了解决方案,如下所示:
PreUpdate 和 PostUpdate 回调仅在存在时触发 持久化的实体字段之一的更改。这意味着 默认情况下,如果您只修改 $file 属性,这些事件 不会被触发,因为属性本身并不直接 通过教义坚持。一种解决方案是使用更新的字段 坚持到 Doctrine,并在更改时手动修改它 文件。
按照本讨论的建议,在持久事件之前在控制器中添加一个虚拟字段以进行更新:
https://github.com/symfony/symfony-docs/pull/564
public function setFile(UploadedFile $file)
{
$this->file = $file;
$this->updatedAt = new \DateTime();
}
【讨论】:
我也遇到过类似的情况。 我尝试使用文件路径编辑数据库中的现有记录。 当我编辑记录时,我必须上传新文件,这对用户来说不舒服。 在我的解决方案中,我使用变量 tmp 文件作为文件哈希和变量文件名。 我在 Action 编辑类中所做的所有需要的操作。
下面链接中的完整示例动作类
https://github.com/marekz/php_examples/wiki/Symfony-how-to-edit-attachment-form
【讨论】: