Zum Inhalt springen

Plausibilitätsprüfung in Backendformularen

Erstellt am 26. September 2006 · 9 Antworten · letzte Antwort am 27. September 2006

Tags: TCA, Frage

cosinus ·

Hallo Gemeinde

Folgendes Problem:
Ich habe im $TCA ein Text Feld definiert, in welches mehrere Daten eingetragen werden müssen. Jetzt ist es wichtig, dass diese Daten einen Sinn ergeben. Dazu existiert ein Php Script welches den Inhalt des Feldes prüfen könnte.
Im t3lib_TCEmain existieren Hooks wo ich das Script einhängen könnte. z.B.: processDatamap_preProcessFieldArray.

Hier erhalte ich ein Array mit den Formularfeldern welche ich manipulieren kann.

Jedoch möchte ich ja, dass der Speicher/Ändern Vorgang abgebrochen wird, sobald mein Script einen ungültigen Wert entdeckt. Auch wäre es Interessant wenn dann im Eingabeformular das Feld markiert würde und ev. sogar ein sinvoller Fehlertext erscheinen würde.

Kurzum: wie mache ich in Backendformularen eine Plausibilitätsprüfung?

just2b ·

Hallo,

vermutlich am besten mit einem Feld vom Typ "user". mehr dazu wie immer in der API unter ['columns'][fieldname]['config'] / TYPE: "user"

lg georg

cosinus ·

Hallo

Mit dem Feld vom Typ "User" kann man ein eigenes (optisch angepasstes) Formularfeld erstellen. Die Feldprüfung erfolgt via Javascript.

Das grundlegende Problem bleibt das Gleiche.

cosinus ·

Dies ist leider nicht was ich suche.

Der Key "eval" existiert nur in Inputfeldern, nicht bei Textfeldern. Es wird lediglich ein Wert evaluiert nicht aber gefordert (ausser "required"). Dass heisst wenn ich z.B.: in ein Datumsfeld nur 12 eingebe, versucht Typo3 daraus ein Datum zu formen. Ob's Sinn macht oder nicht!

Mit "userdefined" eval-Routinen kann ich eine Javascript hinterlegen. Nützt in meinem Fall aber nichts, da der Plausibilitätstest in php vorliegt. Ob damit eine Speicherung der Eingabe unterbunden werden kann konnte ich nicht herausfinden, denke aber nicht.

Ich bin der Meinung, dass Hooks meinen Wünschen am nächsten kämen. Ich frage mich auch ob denn bis jetzt noch niemand den Bedarf gehabt hat einen Plausibilitätstest über das Gesamte Formular zu machen um dann Typo3 mitzuteilen, ob der Datensatz gespeichert werden darf oder nicht?
Vielleicht weis jemand konkret ein Plugin, welches das tut. Dann wäre ich froh, wenn er mir das mitteilt. Merci!

steffenk ·

hast Du das genau angeschaut ?

You can supply your own form evaluations in an extension by creating a class with two functions, one which returns the JavaScript code for client side validation called returnFieldJS() and one which does the server side validation called evaluateFieldValue().

m.E. geht das auch mit Textfeldern.

Sollte das nicht ausreichen, so schau Dir die t3lib_tcemain an, dort gibt es die ganzen Hooks. Selbstverständlich kannst Du in solch einem Hook auch Speicherung unterbinden, ob Du das im Formular sichtbar machen kannst, weiss ich nicht und wage ich zu bezweifeln.

cosinus ·

Diesen hier hab' ich wohl übersehen:

...and one which does the server side validation called evaluateFieldValue().

Werd's also nochmals zu Gemüt führen.

Eval gibts laut https://docs.typo3.org/m/typo3/reference-tca/main/en-us/Index.html nur in Inputfeldern. Aber das werde ich Zuge der Arbeit oben nochmals ausprobieren.

Sympatisch wären eigentlich die Hooks. Da kann man Formübergreifend einen Plausibilitätstest machen! Doch habe ich nicht herausgefunden wie ich Typo3 mitteilen soll, dass dieser Datensatz nicht gespeichert werden darf!

Ich hab' mir das TCEmain angeschaut, muss aber sagen bin daraus nicht wirklich schlau geworden 😢
Is aber auch harter Tubak #angry#

steffenk ·

Du musst lediglich die tcemain nach "hook" durchsuchen, dann siehst Du die Punkte, wo Du Dich einhaken kannst. Du kannst dann das fieldarray auch löschen, wenn Du das speichern verhindern willst (vll gibts noch was eleganteres ...)

cosinus ·

Das mit den Hooks hab' ich schon gesehen. Jedoch ist mir dabei auch folgender Kommentar aufgefallen:

// Performing insert/update. If fieldArray has been unset by some userfunction (see hook above), don't do anything

// Kasper: Unsetting the fieldArray is dangerous; MM relations might be saved already and files could have been uploaded that are now "lost"

Das hört sich dann eher an als sollte man das besser nicht tun?!

Nun gut in meinem Fall habe ich keine MM relations und (noch) keine Files. Aber so richtig sauber hört es sich dann eben doch nicht an![/quote]