Angenommen, wir haben Modelle A
und B
und wir müssen wählen, welche von ihnen zu Instanziieren basierend auf den Informationen aus der Sicht.Ist es eine gute Übung, ein Modell auf der Grundlage des Modellklassennamens nach POST zu wählen?
Wäre es eine gute Übung sein, so etwas zu tun:
// ...
$this->validate($request, [
'model.class_name' => 'in:A,B' // restrict users to only pass either 'A' or 'B' as class_name
])
$data = $request()->get('model'); // <-- contains: $data['id'] and $data['class_name']
$id = $data['id'];
$class_name = $data['class_name'];
$$class_name::find($id); // <-- notice, that we are using POST-ed 'class_name' to determine which model we want to use!
// ...
Oder kann dieser Ansatz einige Probleme in der Zukunft vorstellen?
Es ist sehr schlecht, jede Art von Benutzereingaben zu verwenden, ohne es zu validieren. Was passiert, wenn jemand einen Klassennamen einsendet, der nicht zugänglich sein sollte? Sie sollten einen Controller haben, der die Anfrage überprüft, validiert und das geeignete Modell auswählt. –
@MagnusEriksson Ja natürlich. Ich habe nur vergessen, Validierungen in das Snippet aufzunehmen. Danke, dass du darauf hingewiesen hast. Gibt es außer der Validierung des 'class_name' weitere Probleme? –
Ich würde den Klassennamen nicht in meine Ansicht einfügen, ich würde es in meinen Controller setzen und einfach die Ansicht etwas wie 1, 2, 3 usw. senden lassen ... dann können Sie die gleiche Ansicht in verschiedenen Controllern verwenden, die sie übersetzt anders, und Sie müssen nur den Controller ändern, wenn Sie einen Modellnamen austauschen müssen. Und Sie geben Ihre Klassennamen den Benutzern nicht bekannt .... aber das ist nur meine Meinung ... –