2016-03-17 136 views
0

我有一個請求Laravel當我上載與關鍵「SIUP」文件,這樣顯示的請求數據的問題:Laravel請求文件更改

"_token" => "Ab9zfuQn0rb0exCx7IdMcnAxQWi4iqWcfcDy319B" 
"_method" => "PUT" 
"first_name" => "first" 
"last_name" => "aaa" 
"email" => "[email protected]" 
"province" => "11" 
"city_id" => "38" 
"address" => "asdasd" 
"phone" => "1234567890" 
"company_type" => "koperasi" 
"company_name" => "qqq" 
"company_address" => "qqq" 
"pic" => "qqqa" 
"position" => "qqq" 
"siup" => UploadedFile {#30 ▶} 

我想這樣做的請求響應

$request->merge(['siup'=>$myVar]); 

但關鍵siup沒有改變。我想通過laravel雄辯的更新來更改siup值以將其插入到數據庫中。

回答

2

Request對象公開的請求數據來自兩個不同的來源:查詢數據和文件。轉儲請求數據的內容時,它將這兩個源合併在一起,這就是您的輸出。

當您使用merge(),replace()等方法時,它只處理查詢數據。因此,即使您試圖覆蓋siup數據,但實際上只是更改查詢數據中的siup鍵。未觸及文件數據中的siup鍵。當您再次轉儲請求數據的內容時,siup文件數據會覆蓋您的siup查詢數據。

如果您只是將數據作爲數組獲取,然後根據需要使用該數組,您將節省很多麻煩。這比試圖操縱對象更安全,更容易,並且可能還有更多的內容應該沿用你應該做的事情。

喜歡的東西:

$data = $request->except('siup'); 
$data['siup'] = $myVar; 

// now use your data array 
MyModel::create($data); 
+0

,所以我不能在我的請求變量刪除SIUP關鍵? – yudijohn

+0

@patricus謝謝!我花了幾個小時試圖弄清楚爲什麼我的上傳文件替換不起作用,現在我用$ request-> files-> replace(array('file1' - > file1 )),但它的工作原理! (在我的情況下,它是每次上傳單個文件) – adaba

+0

不知何故$ this-> validate($ request,$ rules)對文件部分再次有一個未變更的$請求... – adaba