2016-08-03 67 views
0

我有下面的代碼來創建的數據庫中的條目: $element_names_array = explode(',', $request->input('element_names')); foreach ($element_names_array as $element) { $data[$element] = $request->input($element); } $model = '\\App\\' . $request->input('connected_model'); return call_user_func_array($model . '::create', $data); 創建模型:創建動態使用call_user_func_array給出Laravel錯誤5.2

,創建陣列和傳遞到call_user_func_array功能,這將觸發將該數組作爲參數的Model::create()方法。

但是,由於某種原因,在call_user_func_array()之後,數組類型被轉換爲字符串類型。

我得到這個錯誤和錯誤日誌:

Type error: Argument 1 passed to Illuminate\Database\Eloquent\Model::create() must be of the type array, string given

錯誤日誌

in Model.php line 570 at Model::create('R200500002', 'MALSKDJSNAM123123') at call_user_func_array('\App\RepairOrder::create', array('ro_number' => 'R200500002', 'vin_number' => 'MALSKDJSNAM123123')) in GdmsBotTask.php line 26

正如你可以看到,一個數組傳遞給call_user_func_array ......但它被轉換爲字符串。這是怎麼回事?

回答

1

call_user_func_array將數組轉換爲單個參數。

要修復,使用call_user_func或父陣列在包裝$data

return call_user_func($model . '::create', $data) 
return call_user_func_array($model . '::create', [$data]) 

作爲一個側面說明,除非這個代碼是由非常信任的身份驗證的用戶可調用的,那麼你有一個巨大的安全問題

+0

此代碼僅供單個用戶使用......也是一個BOT腳本。別擔心。但肯定請指出安全漏洞... – notANerdDev

+0

@notANerdDev那麼你是從用戶輸入構建代碼,因此惡意個人可能會製作一個發佈請求,爲您的代碼中的任何模型創建新記錄,例如用戶,折扣,交易等(我不知道你的數據庫是什麼,所以我選擇了一些可怕的聲音!) – Steve

+0

哦,你!大聲笑...我看到...我有點知道,但再一次...這是一個使用應用程序的機器人...所以..沒有後顧之憂。 – notANerdDev