Open nkirstein opened 10 years ago
@contao/developers Wie seht ihr das? Und falls ja, ist das ein Bug oder ein Feature?
Naja, ich hab das immer als "ist halt so" zur Kenntnis genommen ;-)
Das Problem bei der vorgeschlagenen Lösung, ist dass die uuid
nicht in jedem Fall da ist. Wenn die Datei nicht dem DBAFS hinzugefügt werden soll, wird sie keine uuid
haben. Und was wenn ich nicht die uuid
sondern size
möchte? Dann muss ich ja trotzdem wieder
$size = $_SESSION['FILES'][$objWidget->name]['size'];
nutzen. Also wenn schon, dann würde ich erwarten, dass varValue
das gesamte Array enthält.
Einfach so ins Dbafs und UUID geht nicht, weil die Anforderungen immer unterschiedlich sind. Die Datei muss ja gar nicht innerhalb Contao liegen.
@Toflar wie macht unser fineuploader das?
Woher soll ich das wissen? Lies den Code doch selbst? :-)
Ich hab es bislang auch immer als "ist halt so" verwendet. Allgemein ist die gesamte Upload Thematik ein wenig "krampfhaft" zu verwenden.
Was ist denn mit @Toflar's Vorschlag, $_SESSION['FILES'][$objWidget->name]
als $this->varValue
zu setzen? Das halte ich für eine gute Lösung.
Das löst das Problem nicht wirklich, weil das Upload-Widget z.B. auch $blnSubmitInput = false
hat. Und das hat sicher seine Gründe. Beispielsweise liefert der Formular-Hook die Files als separates Array, das wäre ja dann gar nicht mehr nötig?
Ich glaube wenn wir das wirklich einführen wollen, dann in einem neuen Widget. Ein Upload-Feld das auch "state" behält (siehe auch #5486), das ggf. mehrere Dateien kann, das Fortschritt anzeigt etc. Im Backend haben wir ja bereits ein Uploader-Script, vielleicht kann das auch in einem Frontend-Widget eingesetzt werden?
PS: oder man nutzt Extensions ;-)
Gibt es einen bestimmten Grund, warum die Methode validate() in der FormFileUpload.php keinen $this->varValue definiert wie die anderen Formular-Widgets?
Mir ist das gerade aufgefallen, weil ich das Mitglieder-Modul "Persönliche Daten" um ein Upload-Feld ergänzen wollte und dann festgestellt habe, dass beim Upload nichts in der Datenbank gespeichert wird, obwohl ich in der DCA eine entsprechende Spalte konfiguriert habe:
Das ModulePersonalData ruft ja nacheinander für jedes Formularfeld die Methode validate() auf und holt sich den $objWidget->value. Der wird dann im entsprechenden Feld des Member Models abgelegt und am Ende wird das Model gespeichert. Da aber das Widget FormFileUpload keinen $this->varValue definiert, bekommt das ModulePersonalData in diesem Fall keinen $objWidget->value geliefert.
Spricht irgendetwas dagegen, die Methode validate() in der FormFileUpload.php so zu ergänzen, dass die UUID der hochgeladenen Datei als $this->varValue abgelegt wird? Etwa so (Version Contao 3.2.13, FormFileUpload.php, ab Zeile 259):