Empfehlungen: Erweiterte Suche

Validierungs Problem mit optionalen Feld

Datenbankobjekte strukturieren und validieren

Validierungs Problem mit optionalen Feld

Beitragvon derAngler » So 13. Jun 2010, 23:12

Guten Abend,

ich bin neu bei cakePHP und habe direkt bei der Validierung im Model mein erstes größeres Problem. Und zwar habe ich einem Formular mehrere Eingabefelder, darunter sind auch 2 Felder ("steuernr" und "gericht") die keine(!) Pflichfelder sind. Sollte der Benutzer jetzt jedoch in einem der beiden Felder eine Eingabe machen, so möchte ich diese natürlich überprüfen, sprich validieren.
Mein Problem ist nun, das ich sowie ich z. Bsp. eine Regel zur Überprüfung der Länge hinzufüge wird das ganze zu einem Pflichtfeld und der Nutzer muss eine Eingabe vornehmen. Falsches Verhalten. Danach habe ich es mit der "required"-Regel versucht, aber das ergibt ein ganz merkwürdiges Verhalten. Am Ende habe ich dann noch "notEmpty" versucht, aber auch damit wird es zu einem Pflichtfeld.
Code: Alles auswählen
            'steuernr' => array(
                'erforderlich' => array(
                    'rule' => array('notEmpty',false),
                ),
                'maxlength' => array(
                    'rule' => array('maxLength', 50),
                    'message' => 'Sie duerfen nicht mehr als 50 Zeichen eingeben.'
                ),
            ),
            'gericht' => array(
                'erforderlich' => array(
                    'rule' => false,
                    'required' => false
                'maxlength' => array(
                    'rule' => array('maxLength', 50),
                    'message' => 'Sie duerfen nicht mehr als 50 Zeichen eingeben.'
                ),
            ),
 


Kann mir jemand sagen wie ich das richtig machen muss? ich will einfach erreichen das das Eingabefeld zwar kein Pflichtfeld ist, aber sofern eine Eingabe getätigt wurde, nach von mir festgesetzten Regeln überprüft wird.
derAngler
 
Beiträge: 3
Registriert: So 13. Jun 2010, 18:32

Re: Validierungs Problem mit optionalen Feld

Beitragvon mbrod » So 13. Jun 2010, 23:59

Wenn nur die Länge validiert werden soll, würde auch folgender Schnipsel ausreichen:
Code: Alles auswählen
            'steuernr' => array(
                    'rule' => array('maxLength', 50),
                    'message' => 'Sie duerfen nicht mehr als 50 Zeichen eingeben.'
                ),
 

Eine Validierungsmeldung taucht in diesem Fall nur dann auf, wenn über 50 Zeichen eingegeben werden.
Wird das Feld leer gelassen, so wird der Datensatz gespeichert.

Allerdings habe ich auch gerade festgestellt, dass durch das CSS das Feld (fälschlich) als Pflichtfeld markiert wird. Anscheinend erscheint das rote Sternchen im Label des Feldes (Release 1.3.0), sobald eine Validierungsregel im Model definiert wird.
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: Validierungs Problem mit optionalen Feld

Beitragvon derAngler » Mo 14. Jun 2010, 09:00

Allerdings habe ich auch gerade festgestellt, dass durch das CSS das Feld (fälschlich) als Pflichtfeld markiert wird. Anscheinend erscheint das rote Sternchen im Label des Feldes (Release 1.3.0), sobald eine Validierungsregel im Model definiert wird.


Das Problem habe ich auch schon festgestellt. Weiß irgendjemand dafür eine Lösung? Den wenn der Fettdruck+Stern nicht wäre, dann würde das ganze ansonsten soweit passen. Allerdings ist es so wie es jetzt aussieht (validierung funktioniert, dafür aber optisch ein Pflichtfeld) auch nicht das Richtige.
derAngler
 
Beiträge: 3
Registriert: So 13. Jun 2010, 18:32

Re: Validierungs Problem mit optionalen Feld

Beitragvon euromark » Mo 14. Jun 2010, 10:09

mir ging das auch immer ziemlich auf die nerven
hab daher den core form helper modifiziert
nun hab ich ruhe^^

Zeile 785ff:
Code: Alles auswählen
            $divOptions['class'] = 'input';
            $divOptions = $this->addClass($divOptions, $options['type']);
            if (is_string($div)) {
                $divOptions['class'] = $div;
            } elseif (is_array($div)) {
                $divOptions = array_merge($divOptions, $div);
            }

            /** CORE-MOD **/
            /*
            if (
                isset($this->fieldset[$modelKey]) &&
                in_array($fieldKey, $this->fieldset[$modelKey]['validates'])
            ) {
                $divOptions = $this->addClass($divOptions, 'required');
            }
            */

            if (!empty($options['required'])) {
                $divOptions = $this->addClass($divOptions, 'required');
            }
            /** CORE-MOD end **/


und nun kann man im view jeweils selbst "festlegen", was required ist und was nicht.
zwar redundant, dafür aber in allen fällen so wie mans will
man könnte das evtl noch mergen - und die manuelle methode mit "true/false" die core version überschreiben - und ansonsten die core version benutzen...
kann ja gern jemand verbessern :)
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows


Zurück zu Models

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast