フォームから入力された値を、そのままの値でDB登録したり、また計算してから登録しようと思っています。
modelのvalidateを使うと、テーブル定義してあるカラムは簡単に入力チェックできると思いますが、
それ以外の項目は、コントローラーのメソッドに自分で入力チェックプログラムを書くしかバリデーションする方法はないのでしょうか?
何か良い方法をアドバイスしてください。
また、そういうことが書かれているURLがあれば教えてください。
どのサンプルを見ても、フォームからDB登録の一直線なんですよね。
コントローラ内で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
あたりが参考になるかと。
登録・更新時に毎回、チェックするならモデルの 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件)