2010-08-28 3 views
9

Ich möchte gesetzt Fehler Validierung Eingabefeld manuell in der Steuerung Beispiel:CakePHP: Wie eingestellte Fehler Validierung Eingabefeld manuell in Controller

if ($remainTime < 30) { 
     ..... set error validation in here (error: limitTime), (error is not in model) 
    } 

andere Frage: Ich möchte fragen: bindModel (in In diesem Fall verwende ich bindModel in Behaviors) werde den Verlust der Beziehung mit anderen Modell verursachen, aber ist bindModel Ursache Verlust von $ var validieren, auch?

+1

Für Kuchen 2.0, http://stackoverflow.com/questions/5765236/applying-form-errors-manuell den Trick für mich. – domsom

Antwort

15

wenn das $ validate im Modell definiert ist, verursachen bindModel wont closs von $ var Validieren.

Wie für Sie primäre Frage; Sie können/ungesetzt/update $ validationerrors des models..eg gesetzt

($remainTime < 30) { 
    $this->Model->validationErrors['limitTime'] = "time is less than 30"; 
} 
+0

funktioniert es nicht für CakePHP 2.6+? – neobie

0

Wahrscheinlich Sie suchen etwas like this

+0

Nein, ich möchte die Fehlerüberprüfung setzen, in diesem Fall $ validate == null – meotimdihia

+2

Möchten Sie ein Feld ungültig machen oder nur anzeigen, dass das Formular im Allgemeinen ungültig ist? –

13

Diese das invalidate Verfahren erreicht werden kann, verwenden, wird Flag das Feld einen Fehler hat: -

$this->Model->invalidate('field_name', 'error message'); 
+1

Dies ist wahrscheinlich die korrektere Antwort, da dies die Validator-Methode aufruft, die _fast_ die gleiche Funktion wie die derzeit akzeptierte Antwort erfüllt. Siehe die 2.6 API-Dokumentation hier: http://api.cakephp.org/2.6/source-class-ModelValidator.html#278-288 – alecho

+0

funktioniert nicht. Fehlermeldung wird nicht angezeigt. – neobie

+0

@neobie Dies ist die korrekte Methode zum Ungültigmachen eines Feldes in CakePHP 2.x. Wenn dies nicht für Sie funktioniert, tun Sie wahrscheinlich etwas anderes falsch. – drmonkeyninja

0

Da ein Los vergangen dies, um beantwortet wurde, da Sie korrekte Nachricht übergeben müssen es so ausgedrückt:

$this->Model->validationErrors['limitTime'] = array("time is less than 30"); 

Formular erwartet Array von Fehlermeldungen.

0

Wenn Sie ein zugeordnetes Modell ungültig zu machen möchten, können Sie so etwas wie folgt verwenden:

$this->Model1->Model2->invalidate('Model2', __("Your validation message")); 

In meinem Fall entkräftet es zugeordnet select multiple (HABTM) Feld.

Verwandte Themen