2016-05-14 119 views
0

我試圖用映像文件名替換'pic'值,該值設置爲數組,但合併似乎不起作用。合併請求不能正常工作

我沒有在下面的代碼中看到日誌中的任何錯誤。我想我不允許嵌入圖片,所以下面有鏈接。我正在做一個Laravel項目。

Log::info($request); 

$image = $request->file('pic'); 
$imageName = $image->getClientOriginalName(); 

$request->merge(array('pic' => $imageName)); 
$request->file('pic')->move(base_path()."/public/profile_pics",$imageName); 

Log::info($request); 

Laravel Log

什麼想法?

回答

3

你不能輕易擺脫文件。這裏的問題很複雜,但我會盡力解釋。

因此,基本上每次初始化請求並嘗試從中獲取數據時,請求都會將所有文件轉換並將其存儲在受保護的數組中。
然後,當您請求->all()時,它會遞歸合併所有純文本輸入和文件輸入,因此如果您使用純文本輸入名稱pic和文件名稱pic,文件比純文本輸入具有更高的顯示優先級。

現在髒了廉價的解決方案:從原始請求屬性

$request = new Request($request->all()); 
    $request->merge(['pic' => 'zzz']); 
    dd($request->all()); 

形成新的要求,那麼你的新請求將不會有任何文件,所以你可以很容易地合併任何你需要它。


因此得出結論:一旦您嘗試從請求訪問ANY值,它會將文件保存在受保護的數組中,並且現在無法將其移除。
但是,如果您有任何干淨的請求,但沒有任何先前的訪問權限,您可以通過編寫以下行輕鬆刪除它們:$request->files = collect();

+0

工作正常!非常感謝。只要我賺取更多的代表積分,我就會提高你的答案。 你能指點我的任何文檔,爲什麼他們在訪問請求後將文件保存在受保護的數組中?我想知道這是爲什麼。 – roerjo

+0

@roerjo你不能在文檔中找到這些東西,你必須自己挖掘。基本上,這是問題https://github.com/laravel/framework/blob/eedb619baa9​​7105901d7256166df8875afd71c59/src/Illuminate/Http/Request.php#L433因爲'$ convertedFiles'是受保護的變量,所以你不能改變它容易。 –