我有一个带有文件上传字段的表单(仅限PDF格式)。提交表单并且存在有效的上载文件后,我重命名并移动文件。然后我尝试再次显示带有表单的页面 - 此时Symfony\Component\HttpFoundation\File\File
类构造函数抛出FileNotFoundException
,因为由于某种原因,它已被传递给不再存在的临时文件的路径
相关事实:
UploadedFile
方法返回的File
对象覆盖我从表单中获取的->move()
对象,但这没有帮助。FileType
类的子类,并将data_class
更改为SplFileInfo
(Symfony的File
类的父类)b / c SplFileInfo
不会在无效路径上引发异常,但这也没有效果。我对正在发生的事情的解释是,出于某种原因,当您创建表单视图时,Symfony使用旧的临时文件路径为文件上载字段实例化新的File
对象 - 从而导致致命错误绝对不应该发生(因为你什么时候不移动上传的文件?)。
任何有关我尚未想到的事情的建议都会非常感激!
我通过查看堆栈跟踪找出了问题 - 我有一个调用Request::createFromGlobals()
的Twig扩展,导致尝试使用不再存在的临时文件路径创建一个新的UploadedFile对象。让扩展在其构造函数中获取已存在的Request
对象应该可以防止这种情况。