2016-08-03 20 views
0

Ich habe den folgenden Code einen Eintrag in der Datenbank zu erstellen: $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); Erstellen eines Modells :: create dynamisch mit call_user_func_array gibt einen Fehler auf Laravel 5.2

Ein Array erstellt wird und auf die call_user_func_array Funktion übergeben, die Trigger Die Methode Model::create() übergibt das Array als Argument.

Aber aus irgendeinem Grund, direkt nach der call_user_func_array() wird der Array-Typ in String-Typ konvertiert.

Ich erhalte diesen Fehler und Fehlerprotokoll:

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

Fehlerprotokoll

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

Wie Sie feststellen können, ein Array an die call_user_func_array geben wird ... aber Es wird in eine Zeichenfolge konvertiert. Was ist los?

Antwort

1

call_user_func_array wandelt das Array in einzelne Parameter um.

Um dies zu beheben, verwenden Sie call_user_func oder $data in einem übergeordneten Array wickeln:

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

Als Seite beachten, es sei denn, dieser Code nur aufrufbar durch sehr vertrauenswürdigen authentifizierte Benutzer ist, dann haben Sie eine riesige Sicherheitsproblem

+0

Dieser Code wird nur von einem einzigen Benutzer verwendet ... Das ist auch ein BOT-Skript. Keine Bange. Aber bitte weisen Sie auf die Sicherheitslücke hin ... – notANerdDev

+0

@notANerdDev Nun, Sie erstellen Code aus Benutzereingaben, so dass eine böswillige Person eine Post-Anfrage erstellen kann, die einen neuen Datensatz für jedes Modell in Ihrem Code erstellt, zB Benutzer , Rabatte, Transaktionen usw. (Ich habe keine Ahnung, was Ihre Datenbank enthält, also habe ich einige gruselig klingende ausgewählt!) – Steve

+0

Oh ya !! Lol ... ich sehe das ... ich wusste das irgendwie ... aber wieder ... es ist ein Bot, der die App benutzt ... also ... keine Sorge. – notANerdDev