【发布时间】: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