Symfony HttpFoundation获取单个文件是否返回null?

时间:2018-10-23 12:05:44

标签: php symfony symfony-3.4 symfony-http-foundation

我将symfony HttpFoundation 用于上传文件,如果我调用all(),则FileBag可以工作,但是如果我使用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')应该可以工作...

1 个答案:

答案 0 :(得分:0)

如果POST字段确实如此命名,则

$request->files->get("document")是正确的。 (请确保与您的浏览器的网络检查员联系。)我怀疑该字段的名称不同,否则此起作用。

如果它来自托管表单类中的文件输入,则应改用$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吗?)