Symfony 3.3:移动/重命名上传文件

时间:2017-10-06 19:56:41

标签: symfony symfony-3.3 symfony3.x

我有一个带有文件上传字段的表单(仅限PDF格式)。提交表单并且存在有效的上载文件后,我重命名并移动文件。然后我尝试再次显示带有表单的页面 - 此时Symfony\Component\HttpFoundation\File\File类构造函数抛出FileNotFoundException,因为由于某种原因,它已被传递给不再存在的临时文件的路径

相关事实:

  • 表单字段(包括文件上载字段)未映射到实体,因为我使用Wordpress样式的“元”表来表示与实体关联的其他数据;控制器处理创建要保留的任何新对象。
  • 新文件名已成功保存到数据库中;我进一步验证了$ form-> createView()调用发生错误。
  • 在有人建议这是由于我的PHP设置之前,请注意我故意尝试上传尺寸低于限制的PDF文件。
  • 我的临时解决方案是重定向到另一个页面(当我这样做时没有错误),但是在提交表单后仍然显示表单页面更为理想。
  • 我尝试使用UploadedFile方法返回的File对象覆盖我从表单中获取的->move()对象,但这没有帮助。
  • 我还尝试创建内置FileType类的子类,并将data_class更改为SplFileInfo(Symfony的File类的父类)b / c SplFileInfo不会在无效路径上引发异常,但这也没有效果。

我对正在发生的事情的解释是,出于某种原因,当您创建表单视图时,Symfony使用旧的临时文件路径为文件上载字段实例化新的File对象 - 从而导致致命错误绝对不应该发生(因为你什么时候不移动上传的文件?)。

任何有关我尚未想到的事情的建议都会非常感激!

解决

我通过查看堆栈跟踪找出了问题 - 我有一个调用Request::createFromGlobals()的Twig扩展,导致尝试使用不再存在的临时文件路径创建一个新的UploadedFile对象。让扩展在其构造函数中获取已存在的Request对象应该可以防止这种情况。

0 个答案:

没有答案