2

我使用 symfony HttpFoundation上传文件,如果我调用 FileBag 工作all(),但如果我使用get('document_name')它返回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')应该可以工作...

4

1 回答 1

0

$request->files->get("document")如果 POST 字段真的被命名为 this 是正确的。(请与浏览器的网络检查器确认。)我怀疑该字段的名称不同,否则这起作用。

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

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

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

于 2018-10-24T18:53:14.900 回答