在表单中使用oneuploader与其他字段

时间:2014-03-21 14:26:18

标签: php forms symfony

我想在包含其他字段的Symfony2表单中使用OneUploader包。换句话说,上传的文件作为表单中其余数据的附件处理。但是我只能找到关于如何将上传器作为单独的表单添加到其自己的控制器(文件发送到的控制器)的说明。那么我该如何处理我刚才描述的用例呢?

1 个答案:

答案 0 :(得分:3)

在这里捆绑开发。

jQuery File UploadDropzone这样的前端上传程序在将文件上传到服务器时始终会形成单独的请求。这意味着上传过程发生在之前控制器中的表单处理。如果你真的想上传文件和主表单请求,那么你不应该使用这样的上传器。相反,创建一个实体Media(或类似)将其映射到具有OneToManyManyToMany关联的基本实体,并将其添加到具有Entity类型的表单中。

StackOverflow上有一些很好的答案,例如this one

但是,如果您选择使用前端上传器,则所有文件都将同时发送到服务器。根据文件大小/服务器配置,这可能导致上载错误。此外,上传将不再异步执行,这迫使用户等待上传完成,提交表单后。

在创建表单上处理异步多个上传时存在一般问题。我试着回答一个类似的问题here

  

在创建掩码上启用文件上载的问题是最终会出现孤立文件。这是因为用户能够在不保存实际实体的情况下触发上传。

您的问题似乎是此捆绑包的Orphanage feature的一个很好的用例。它允许您在存在实际实体之前上载文件以将这些文件附加到。提交主表单后,您可以检索文件并在其上方perform some more logic

注意:这绝不是一个完美的解决方案。看看limitations!总结可以说;由于此功能基于会话,因此用户可能最终上传了两次文件。请务必相应处理。


然后您可能只想在文件上传请求中添加更多数据:由于这是在前端上传器中处理的,因此它与实现不同。例如,jQuery File Uploader只是序列化整个表单和sends along all other values, including hidden fields


个人推荐:我不会将文件与表单提交请求一起发送。而是使用前端上传器和:

  • 让用户上传文件,直到实体存在于应该附加的位置。这是一种非常常见的策略,在大多数情况下是理想的策略。创建实体时,第二步就足够了。
  • 如果您真的希望能够直接在创建模板上传文件,请查看孤儿院功能。