http://manual.cakephp.org/chapter/12
ここにいろいろ説明があります。日本語関係のものは、自分でいろいろ設定できます。
で、ここで設定したチェックルールがどこで利用されるか、というと、
1)上記のマニュアルにあるように、
if($this->Post->validates($this->data))
とすれば、$this->data で送られた入力データが、Post モデルの設定ルールに適合しているかチェックできます。正しければ true が返ってきます。
これは、モデルにあるメソッドであることに注意。
2)それぞれの値のどれがおかしいのか調査・設定させるには、
$this->validateErrors($this->User);
とします。これは、“コントローラのメソッド”であることに注意しましょう。この作業では、あるモデルのデータをひとつ一つチェックし、ルールにあてはまらないものがあれば、その“スイッチをパチッと入れる”ような動作をします。つまりは、モデルの invalidate というメソッドを実行し、$this->validationErrors[$field] という配列を 1(スイッチ・オン!)に設定します。
3)$this->Property->save($this->data['Property'])
などのようにして、モデルのsaveメソッド(入力されたデータ)
を実行すると、自動的に validateErrors のチェックがかかります。(2と同じ。)強制的に保存したい場合には、
$this->Property->save($this->data['Property'], false)
とすれば、チェックを無視できます。
4)自前で、“この値はだめだよチェック”をしたい場合には、
if(チェックが通らなかった場合){
$this->User->invalidate('username'); //“エラースイッチ”をON。
}
とすれば、 username というフィールドのデータは通らなかったことになります。ここで複数条件でチェックしたい、エラーメッセージを変えたい、などの場合には、username_hiragana などのように、自分で勝手に作ってしまって大丈夫です。
5)View でのエラー表示
$html->tagErrorMsg('Post/title', 'タイトルを記入してください')
という形を使います。例えば上の場合には、"Postデータのtitleという名前のフラグが立っていれば、エラーを表示する"ということになります。
続けて、
$html->tagErrorMsg('Post/title_hiragana', 'タイトルはひらがなで記入してください')
なども並べておけば、 $this->Post->invalidate('title_hiragana') をしていた場合には表示されることになります。
ちなみに、
・ Model クラスの中には、
validates, チェックが通ったら True を返す。
invalidFields, チェックに引っかかった配列を返す。
invalidate チェックが通らなかったある項目のスイッチをON。
というメソッド。
・ Controller クラスの中には、
validate, エラーの“数”を返す。
validateErrors エラーのあるデータを調査、スイッチを入れてゆく。
というメソッド。
という似て非なる命令がありますので、使い分けに注意しましょう。
【関連する記事】




