検証ルールの作り方
独自の検証ルールを使用するには、モデル内に。独自の検証用メソッドを作成しそのメソッド名を指定します。独自の検証用メソッドにパラメーターを渡す事も出来ます。メソッド名を記述する代わりに'userDefined',特定のオブジェクト、そのオブジェクト内のメソッド名を記述する方法もあります。
class Post extends AppModel
var $validate = array(
'username' =>array(
'rule' => array('myRule','sato'),
'message' => 'satoさんしか書き込みできません'),
function myRule($data,$param){
if($data['username']==$param) return true;
return false;
}
データベースを使った独自の重複チェックの例1
var $validate = array(
'email' =>array(
'rule' => 'checkInGroup',
'message' => 'このグループには既に登録されています'));
function checkInGroup($data) {
//$options['conditions']に検索条件を入れる
$count = $this->find('count',$options);
if($count == 0) return true;
return false;
}
古い情報
1.2の場合、定義済みの「maxLength」ルール(Validationクラス)では日本語の文字数を正しく判断できません。
function maxLength($check, $max) {
$length = strlen($check);
return ($length <= $max);
}
日本語対応にしたメソッドをモデル内に記述すれば、こちらのメソッドが使われる。
$dataはarray('フィールド名'=>''入力値) になっている点に注意
var $validate = array(
'username' =>array(
'rule' => array('maxLength',5),
'message' => '5文字以上でないと登録できません''));
function maxLength($data, $max) {
$check = array_shift($data);//配列から取り出す
$length = mb_strlen($check);
return ($length <= $max);
}