検証ルールの作り方
独自の検証ルールを使用するには、モデル内に。独自の検証用メソッドを作成しそのメソッド名を指定します。独自の検証用メソッドにパラメーターを渡す事も出来ます。メソッド名を記述する代わりに'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); }