【问题标题】:Symfony2 forms: Multiple upload widgets in one form: There's a big underlying I just can't swatSymfony2 表单:一个表单中的多个上传小部件:有一个很大的基础,我就是无法应对
【发布时间】:2015-05-15 09:58:11
【问题描述】:

在我开始发布一些代码之前,我将揭露这个问题。问题是代码量很大,所以我第一次想听听我可以调查的线索。

这是我的问题,我正在编写一个表单编辑器来制作文章类型的页面。 它建立在一个三层集合... 由我有链接的部分组成的组件集合(或多或少的列)。 文章实体有两个“横幅”属性,允许用户向网站添加多列图片。 (在顶部和底部)它们是具有 $image 属性的“图片”实体

这些部分本质上是带有文本的标题,但也可用于显示图像。他们也有带有图像的链接。 Picture、Section 和 SectionLink 有一个 $image 属性和相应的 setter 和 getter。该属性是链接的 Image 实体和 LinkImage 实体,都扩展了我的 File 实体。

由于它们是集合组件,因此可以在 1 到 8 之间,每个组件的部分为 0 到 4。链接 0 到 8 之类的东西。

考虑到所有可能包含大量图像的图像的项目。一切进展顺利(不,我在开玩笑,这是一个痛苦的问题被卡在上面大约一个月)上传正常进行然后我意识到有些问题,因为我尝试在每个级别的 setImage 方法中添加一些代码。

好的,当我上传一张图片来替换另一张图片时,我不希望旧的图片留在服务器上,所以我在 setImage 方法中添加了一些代码,以便在替换本地属性 $image 之前删除硬盘上的旧文件。

我很快意识到,上传图片不会删除我要替换的旧文件,而是会删除文章其他地方的文件。例如,在组件 0 section2 中用另一个图像替换图像会在组件 4 section 4 中删除它。通常它会删除第一个横幅图像。

我做了一些调试,发现使用文件上传小部件并没有调用正确的方法。 在部分中使用文件上传将调用 Picture::setImage 或者它可以调用 SectionLink::setImage。在 setImage 中显示 Image::getName 将显示与混淆部分相对应的文件名。

在您问之前,所有这些字段都有单独的 ID 和名称 html 表单属性 对于section和sectionlink,它们是通过原型生成的,显然没有错误

类似地,上传小部件在 twig 中生成,如下所示:

{{ form_row(form.topBanner.image.file) }} {{ {{ form_widget(section.image.file) }} //当然是多层次的“for in”

我应该补充一点,如果我不使用上传小部件的“删除”代码确实会将图像设置在正确的位置。正是当我尝试在上传之前从当前图像访问数据时,才会给出这个结果。我必须说,我在调试方面非常熟练,而且我仍在使用 die/var_dump。我会对我应该关注代码的哪些区域感兴趣。表单、实体、控制器,我一直在到处寻找,但我完全不知道发生了什么。 或者,如果有人可以为我正在尝试做的事情提出更好的选择,请分享。但是我非常非常想知道 Symfony 的内部工作中发生了什么(除非只是我像往常一样忽略了一些明显的东西......

希望有人能帮助我..谢谢!

【问题讨论】:

  • 我会根据需要分享更多内容。但体积巨大,仅 javascript 就有 400 多行。只需询问您是否需要特定的东西。

标签: php forms symfony upload doctrine


【解决方案1】:

好吧,似乎所有文件小部件都触发了一个设置器,无论它们是否被使用,都没有错误。 因此,将 setImage 用于功能是一个坏主意。 我最终选择在控制器中进行,毕竟这是有道理的。 删除未使用的图像文件。在处理表单之前,我创建了一个文件图像路径的数组集合。刷新数据后,我用新数据创建一个新数组,比较两个数组并取消链接不在第二个数组中的文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多