在我的 symfony 專案中,我有一個 ajax 呼叫來上傳多個檔案。目前正在訪問它
$files = $request->files->get('file');
但是為了進一步編碼,在 $files 變數上使用了 foreach 但不起作用。
在另一個頁面上具有相同的功能,但那是頁面提交,因此可以使用在那里作業正常的 $form 物件進行訪問。
$form->get('file')->getData();
此引數訪問方法有什么區別請幫助。
uj5u.com熱心網友回復:
簡而言之:因為file在第二種情況下該欄位不存在。
更詳細的解釋是這樣的:
表單組件建立在HttpFoundation (提供面向物件的方式來處理請求和回應)和其他一些 symfony 組件之上,不僅提供表單構建器,還提供驗證、csrf 保護、物件映射和其他好東西。
在第一個示例中,您使用的File ParameterBag是HttpFoundation. 它基本上是$_FILES超全域的,您正在訪問特別命名file的那個。因為它是一個 ajax 呼叫,所以我敢打賭它是一個手工制作的表單或一個純 js 函式;該file欄位就是這樣命名的。在這種情況下,您直接處理原始 http 請求。鮑勃是你的叔叔。
但是,當使用表單組件時,如果您有一個名為的表單欄位file,它將不會顯示在請求中;表單以陣列的形式發送:
[
'form_name' => [
'field1' => 'value1',
// More fields or nested arrays
],
];
該組件這樣做是為了允許具有相同欄位的多個表單,同時能夠識別它們等。
作為表單處理的一部分,請求中的欄位被映射回表單欄位。這就是您的應用程式在第二種情況下使用的內容,Form即已發送資料的物件表示。有關該程序的更多資訊,請參閱檔案。您還可以使用瀏覽器工具或 Symfony Profiler 檢查請求以獲得更多資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/533869.html
