Empfehlungen: Erweiterte Suche

Fehlermeldungen (ähnlich Validierung)

Daten auslesen, verarbeiten und den Views übergeben

Fehlermeldungen (ähnlich Validierung)

Beitragvon Molekül » Mo 23. Aug 2010, 15:35

Hallo,

Ich habe ein Formular das ausgefüllt und abgesendet wird.
Dabei gibt es auch Formularfelder die nicht Teil des Models sind.
Aus den Werten dieser Felder werden im Controller die entsprechenden Werte für das Modell generiert, im data-Array gespeichert, validiert und gespeichert. Sollten bei der Validierung Fehler auftreten, werden diese automagic von cake im view dargestellt.
So weit so gut.

Nun möchte ich aber auch die Felder validieren, die nicht Teil irgendeines Modells sind.

Eine Möglichkeit wäre, eine variable §error_feld1 = false; anzulegen und im Fall einer Fehlermeldung mit dem Fehlertext zu füllen. Im view kann ich dann prüfen, ob die Variable nicht false ist, und falls das der Fall ist, die Fehlermeldung ausgeben.

Aber geht das auch eleganter? Kann ich das Verhalten von cake bei Validierungsfehlern des Models irgendwie nutzen?

(ich nutze cake3)
Molekül
 
Beiträge: 27
Registriert: Fr 25. Sep 2009, 09:45
CakePHP-Version: 3.x

Re: Fehlermeldungen (ähnlich Validierung)

Beitragvon mbrod » Mo 23. Aug 2010, 17:53

Das Problem habe ich noch nicht ganz verstanden. Es gibt einmal Felder, die nicht Teil des Models sind aber dazu dienen Werte des Models zu generieren. Weiter unten heißt es, dass Felder, die nicht zum Model gehören, validiert werden sollen. Sind das die gleichen Felder, wie oben, aus denen Werte für das Model generiert werden sollen?
mbrod
 
Beiträge: 193
Registriert: Mi 20. Mai 2009, 18:09
Wohnort: Frankfurt am Main
CakePHP-Version: 1.3.8
OS: Mac OS X

Re: Fehlermeldungen (ähnlich Validierung)

Beitragvon Molekül » Mo 23. Aug 2010, 20:04

Sorry :-)

Das Model hat folgende Tabellenspalten:
Model->FeldA
Model->FeldB
Model->FeldC

Das Formular hat
Model->FeldA
FeldD

im Controller wird aus FeldD
Model->FeldB
und
Model->FeldC
generiert.

Model->FeldA/FeldB/FeldC werden dann validiert und gespeichert.

Im Schritt vorher möchte ich aber prüfen ob FeldD das richtige Format hat und direkt unter diesem Feld eine entsprechende Warnung anzeigen, falls der User in FeldD etwas unpassendes geschrieben hat.

Klarer?
Molekül
 
Beiträge: 27
Registriert: Fr 25. Sep 2009, 09:45
CakePHP-Version: 3.x

Re: Fehlermeldungen (ähnlich Validierung)

Beitragvon mbrod » Mo 23. Aug 2010, 20:25

Idee: Im Model das FeldD speichern und die Felder B und C als virtuelle Felder definieren. Siehe dazu:
http://book.cakephp.org/view/1608/Virtual-fields

Vorteil: FeldD wird ganz normal validiert und für das Anzeigen (oder was auch immer dann mit B und C gemacht wird) werden die virtuellen Felder herangezogen. Alles ist im Model untergebracht, wo die "Geschäftslogik" hingehört.

Voraussetzung: die Formeln, die aus FeldD die Felder B und C generieren, lassen sich mit SQL darstellen. (was mir wahrscheinlicher scheint, als wenn aus B und C FeldD generiert würde.)
mbrod
 
Beiträge: 193
Registriert: Mi 20. Mai 2009, 18:09
Wohnort: Frankfurt am Main
CakePHP-Version: 1.3.8
OS: Mac OS X

Re: Fehlermeldungen (ähnlich Validierung)

Beitragvon euromark » Mo 23. Aug 2010, 22:16

warum so kompliziert?

das passiert doch von ganz allein, wenn man ein feld D in dem formular hat
und man im model dazu validierungsregeln hat
dem model ist es dabei völlig wurscht, ob das feld auch in der DB existiert
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: Fehlermeldungen (ähnlich Validierung)

Beitragvon mbrod » Mo 23. Aug 2010, 23:06

Stimmt!
Man muss dann natürlich im Controller erst validieren gemäß:
http://book.cakephp.org/view/1182/Validating-Data-from-the-Controller
und dann beim save im $params Array 'validate' => false und nur die Felder sichern, die auch in der DB vorhanden sind.
Richtig?
mbrod
 
Beiträge: 193
Registriert: Mi 20. Mai 2009, 18:09
Wohnort: Frankfurt am Main
CakePHP-Version: 1.3.8
OS: Mac OS X

Re: Fehlermeldungen (ähnlich Validierung)

Beitragvon euromark » Mo 23. Aug 2010, 23:32

nein
einfach ganz normal save()
und auch nix spezifizieren
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: Fehlermeldungen (ähnlich Validierung)

Beitragvon Molekül » Mi 25. Aug 2010, 20:45

euromark hat geschrieben:warum so kompliziert?

Danke! Ich hatte doch richtig befürchtet dass ich auf der Leitung stehe.

Da die Validierung von FeldD auch von anderen Feldern abhängt muss ich eine eigene Validierungsfunktion erstellen. Aber das steht ja im Kochbuch Kap 4.1.5.2

Einziges "Problem": Die übergebene Variable $check enthält nur das Feld das aktuell validiert werden soll. Mit §this->data kann ich auch auf die anderen benötigen Felder zugreifen. Ist das legitim oder irgendwie problematisch?
Molekül
 
Beiträge: 27
Registriert: Fr 25. Sep 2009, 09:45
CakePHP-Version: 3.x

Re: Fehlermeldungen (ähnlich Validierung)

Beitragvon euromark » Mi 25. Aug 2010, 22:57

nein, das ist legitim, sofern man vorher auf die existenz prüft bzw bei gewollter validierung dieses feldes die anderen variablen mitsendet bei jedem post

bei einem ajax call mit saveField() z.b. würde nur das eine feld D geupdated werden
die regel mit zugriff auf andere variablen in $this->data würde zu fehlern führen.
da muss man die dann noch künstlich dazutun - oder vorher aus der datenbank auslesen.

darüber muss man sich halt im klaren sein.
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows


Zurück zu Controller

Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 0 Gäste

cron