【问题标题】:Symfony2: Edit file uploadSymfony2:编辑文件上传
【发布时间】:2012-04-15 07:31:46
【问题描述】:

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

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

默认的编辑策略是: 1.从数据库中取出 2.注入表格 3.坚持

不知何故,当使用文件上传时,这种策略不再起作用(学说不执行事件)

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

【问题讨论】:

    标签: file-upload symfony doctrine-orm entity


    【解决方案1】:

    说明书不处理更新,特别是在只有文件更改的情况下。

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

    【讨论】:

    • 嗨,你是对的。当没有字段被更新时,生命周期回调事件不会被触发:)
    • 如果你使用 Knp DoctrineExtensions,你可以在持有文件上传逻辑的实体上使用 Timestampable 并使用 $entity->updateTimestamps();在 $em->persist() 之前,它会更新您需要的虚拟字段;)
    【解决方案2】:

    如果您仅更改上传字段生命周期不运行上传方法,则在说明书中的报价框中报告了解决方案,如下所示:

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

    按照本讨论的建议,在持久事件之前在控制器中添加一个虚拟字段以进行更新:

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

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

    【讨论】:

      【解决方案3】:

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

      下面链接中的完整示例动作类

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多