よくある同一内容を入力させる時のバリデーションチェック

CakePHP 1.2RC3を利用してます

会員登録画面などで、メールアドレスやパスワードを2回入力させ、その内容が一致しているか判定するのってよくありますよね。CakePHPのバリデーションチェックで、独自ルールを作ってそれに対応する方法です。


Viewにて入力項目を設定します。今回は、emailとemail_confという項目に入力された内容が一致してるかチェックするための内容です

<?php echo $form->text('email', $options = array( "size" => "40", "maxlength" => "200" ) ); ?>

確認のためもう一度入力をお願いいたします。<br>
<?php echo $form->text('email_conf', $options = array( "size" => "40", "maxlength" => "200" ) ); ?>


次にapp/app_model.phpに下記を記載します。

<?php
class AppModel extends Model {

	function checkCompare( $valid_field , $suffix ){

		$fieldname = key($valid_field);

		if($this->data[$this->name][$fieldname] === $this->data[$this->name][ $fieldname . $suffix ]){
			return true;
		}

		return false;

	}

}
?>

最後に、modelファイルのバリデーションルールを記載します。
app/models/xxxx.php

var $validate = array(

	'email' => array(

		"rule1" => array('rule' => array('checkCompare','_conf'),
				'message' => '【メールアドレス】 と【メールアドレス(確認)】の内容が異なります'
		),
	),
);

上記のバリデーションルールで、'_conf'を与えることにより、viewで定義したemailとemail_confを比較します。
例えばemailとemail_checkというフィールドが良い場合は、

"rule1" => array('rule' => array('checkCompare','_check'),

というようにします。