Symfony HttpFoundation 获取单个文件 returns null?

Symfony HttpFoundation get single file returns null?

我使用 symfony HttpFoundation 上传文件,如果我调用 all(),FileBag 工作,但如果我使用 get('document_name') 它 return null.

use Symfony\Component\HttpFoundation\Request;


    public function saveFileAction(Request $request) {
        dump($request->files->all());
        dump($request->files->get('document'));
    }

对于 all() 我得到以下响应:

FileController.php on line 175:
array:1 [▼
  "form" => array:1 [▼
    "document" => UploadedFile {#14 ▶}
  ]
]

我这里做错了什么?有人知道为什么我无法使用 get() 方法获取单个文件吗?我在 symfony 文档中发现 $request->files->get('document') 应该可以工作...

$request->files->get("document") 如果 POST 字段确实如此命名,则

$request->files->get("document") 是正确的。 (请与您的浏览器的网络检查器确认。)我怀疑该字段的名称不同,或者这个 工作。

如果它来自托管表单 class 中的文件输入,您应该改为使用 $form->get("document")->getData(); 来检索您的 UploadedFile 实例。根据您在评论中提到的 form[document] 名称和 $request->files->all() 的输出进行猜测,很可能是这种情况。

如果你真的需要从请求属性中读取它,你需要使用 $request->files->get("form[document]"); 因为 Symfony 在从请求属性中原始读取它时不会扩展类似数组的表单输入名称。如果您有一个文本框输入,这也是一样的,您必须使用 $request->request->get("form[firstName]"); 阅读它,但正如我提到的,您应该正确使用托管表单 class 方式 $form->get("document")->getData();如果这真的是一种托管形式。 (Symfony 已经提前为您想到了这一点,包括将输入答案级联到验证规则和数据模型。)

否则我很想知道您首先是如何上传此表单的。 (是AJAX吗?)