スポンサードリンク

CakePHP
CakePHP

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を返すだけです。

たまに用意されたもので対応できない場合があるので

自分でルール作っちゃえばいいのです。

スポンサードリンク