cakephpのバリデーションについて質問です。

フォームから入力された値を、そのままの値でDB登録したり、また計算してから登録しようと思っています。

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

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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2008/10/06 10:31:10
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:heilig_zwei No.1

回答回数119ベストアンサー獲得回数13

ポイント35pt

コントローラ内で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

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

id:zero-uhura No.2

回答回数14ベストアンサー獲得回数3

ポイント35pt

登録・更新時に毎回、チェックするならモデルの 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はダミーです。)

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

  • validateについて ** バリデーションの実行 $this-&gt;[MODEL]-&gt;validates($this-&gt;data) 12章 データバリデーション http://cakephp.jp/doc/validation.html cakephpのバリデーションについて質問です。 http://q.hatena
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません