2006年07月19日

値のチェックにまつわるいろいろ

入力されたデータのチェック方法に関しては、

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  エラーのあるデータを調査、スイッチを入れてゆく。
というメソッド。

という似て非なる命令がありますので、使い分けに注意しましょう。
  

 





posted by SDozono at 12:33| ロサンゼルス 🌁| Comment(0) | TrackBack(0) | CakePHP View | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。