test

CakePHP Note

独自の検証ルールを使用する

UPDATE:2008.07.06

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


定義済みの「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);
}



データベースを使った独自の重複チェックの例1

var $validate = array(
            'email' =>array(
                'rule' => 'checkUnique',
                'message' => '既に登録されています''));

 function checkUnique($data) {
     //これはシンプルな例、
    //検証用メソッドを書かずに'rule' => 'isUnique'と記述するだけでも動作は同じ
     return $this->isUnique($data);
}