Sachen gibt’s, da kommt man erst nach Stunden drauf. Dabei hätte es so einfach sein können…

Ich stand vor folgendem Problem:

In CakePHP sollte direkt bei der Dateneingabe mit $validate die Eingabe geprüft und bei falscher oder fehlender Eingabe eine eigene (passende) Fehlermeldung dazu angezeigt werden. Kein Ding und hatte auch immer funktioniert. Nun konnte ich eingeben was ich wollte, es wurde statt der custom message immer nur „Füllen Sie dieses Feld aus“ angezeigt.

Hier der Code des Models:

public $validate = array(
    'title' => array(
    'rule' => 'notEmpty',
    'required' => true,
    'message' => 'Bitte geben Sie einen Titel ein.'
    )
  );
}

Die Lösung war am Ende einfach: seit CakePHP 2.3 wird das HTML5-Attribut „required“ im FormHelper bzw. im generierten Formular verwendet. Es handelt sich bei der angezeigten und unerwünschten Nachricht also um die eingebaute Browser-Validierung! Damit auch meine eigene Nachricht angezeigt wird, muss dieses Verhalten überschrieben werden.

Das wird in der .ctp wie folgt gemacht:

Form->create('Foo');
    echo $this->Form->input('title', array('required'=>false));
    echo $this->Form->end('Speichern');
?>