Symfony2表单:一个表单中的多个上传小部件:有一个很大的底层我无法拍打


Symfony2 forms: Multiple upload widgets in one form: There's a big underlying I just can't swat

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

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

这些部分本质上是带有文本的标题,但可用于显示图像。他们也有带有图像的链接。图片、部分和部分链接具有$image属性以及相应的二传手和获取器。该属性是链接的图像实体和链接图像实体,所有这些都扩展了我的文件实体。

由于它们是集合组件,因此每个组件的组件可以介于 1 到 8 之间,第 0 到 4 节。链接类似于 0 到 8 的内容。

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

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

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

做了一些调试,我意识到使用文件上传小部件没有调用正确的方法。在分区中使用文件上传将调用图片::设置图像或者它可以调用SectionLink::setImage。在 setImage 中显示 Image::getName 将显示与混淆部分对应的文件的名称。

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

同样,上传小部件是在树枝中生成的,如下所示:

{

{ form_row(form.topBanner.image.file) }} {{ {{ form_widget(section.image.file) }}//在多级"for in"当然

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

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

好的,

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