人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

cakephpのバリデーションについて質問です。
フォームから入力された値を、そのままの値でDB登録したり、また計算してから登録しようと思っています。

modelのvalidateを使うと、テーブル定義してあるカラムは簡単に入力チェックできると思いますが、
それ以外の項目は、コントローラーのメソッドに自分で入力チェックプログラムを書くしかバリデーションする方法はないのでしょうか?

何か良い方法をアドバイスしてください。
また、そういうことが書かれているURLがあれば教えてください。
どのサンプルを見ても、フォームからDB登録の一直線なんですよね。

●質問者: jojo_oraora
●カテゴリ:ウェブ制作
✍キーワード:CakePHP dB Model URL アドバイス
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● heilig_zwei
●35ポイント

コントローラ内でinvalidateを使います。


例えばメールアドレスの重複登録を防ぐ場合、


(※$id = フォームに入力されたメールアドレス)


if($em = $this->User->findbyEmail($this->data['User']['email'])){

if($id != $em['User']['id']){

$this->User->invalidate('mail_duplicated');

}

}


みたいなことをして、ビューで下記のようにすればOKです。

$html->tagErrorMsg('User/mail_duplicated', 'このメールアドレスは既に登録されています。')


http://cakephp.seesaa.net/article/21029045.html

あたりが参考になるかと。


2 ● zero-uhura
●35ポイント

登録・更新時に毎回、チェックするならモデルの validates() をオーバーライドするのがお勧めです。(以下は1.1系の例)

前の方、同様メールアドレスの重複チェック

function validates($data = array()) {
// 標準のバリデート
// DB接続を最小にするため、標準のバリデーションが通ったときのみ実施
$rtn = parent::validates($data);
if (!$rtn) return false;

if (count($data)) {
$this->data = $data;
}

// email のユニークチェック
if (isset($this->data['User']['email'])){
// 新規の場合
if (isset($this->data['User']['id'])) {
// 更新の場合、自分のアドレスは許可
$f = $this->findCount(array(
'User.id' => '<>' . $this->data['User']['id'],
'User.email' => $this->data['User']['email']
));
} else {
// 新規の場合
$f = $this->findByEmail($this->data['User']['email']);
}
if ($f){
$this->invalidate('mail_duplicated');
return false;
}
}

return true;
}

http://q.hatena.ne.jp/answer (URLはダミーです。)

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ