
CakePHPのバリデーションはめちゃくちゃ便利なんですが
バリデーションルールだけでは
うまくいかない時があります。
そんな時に、独自でバリデーションルールを
作って対応できます。
色々できて便利なCakePHPです。
独自バリデーションの書き方
独自バリデーションルールの書き方です。
(例)Brunch.php
public $validate = array(
'brunch_name' => array(
'rule1' => array(
'rule' => 'notEmpty',
'required' => true,
'allowEmpty' => false,
'message' => '支社名が入力されていません'
),
'rule2' => array(
'rule' => 'checkOnly',//独自に作ったもの
'message' => 'その支社名はすでに使われています'
)
)
);
//独自バリデーションルール
public function checkOnly($check){
//チェックしたいルールを書く
if (!empty($this->data['Brunch']['id'])){
//存在するか確認
$count = $this->find('count', array('conditions' => array(
'brunch_name' => $check['brunch_name'],
'company_id' => $this->data['Brunch']['company_id'],
'NOT' => array('Brunch.id' => $this->data['Brunch']['id'])
)));
//1件でもあればfalseを返す
return $count == 0;
}else{
//新規の場合
//存在するか確認
$count = $this->find('count', array('conditions' => array(
'brunch_name' => $check['brunch_name'],
'company_id' => $this->data['Brunch']['company_id'] )
));
//1件でもあればfalseを返す
return $count == 0;
}
}
上記の場合だとある会社では同じ支社名が使えないという場合です。
イメージとするとこんな感じです。

まとめ
バリーデーションルールを指定してする場所で
独自バリデーションの名前を付けて、
エラーメッセージを書きます。
そして下の方で独自バリーデーションを記述します。
引数にはフォームから送られた値を取ります。
あとは、その値を使ってチェック内容を作って
returnでtrueかfalseを返すだけです。
たまに用意されたもので対応できない場合があるので
自分でルール作っちゃえばいいのです。
