CakePHP Note (v1.3) > モデル > 検証 > 検証ルールの作り方

検証ルールの作り方

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

CakePHP Note (v1.3)

Index