我将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')
应该可以工作...
答案 0 :(得分:0)
$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吗?)