1. TOPTOP
  2. Webサービス
  3. CakePHP

CakePHPの複数のバリデーションルール適用について~即戦力になるための PHPシステム開発の教科書より

|

CakePHPのバリデーションについてメモ書きです。public $validateについて、何やら見慣れない記法が出てきたので、確認しておきましょう。

‘notEmpty array()’ってなに?

上記のP148にあるCustomer.phpで使用されている、バリデーションチェックに関するコードを引用すると、こんな感じになっています。

class Customer extends AppModel {
      (省略)
		public $validate = array(
			'customer_cd' => array(
				'notEmpty' => array(
					'rule' => array('notEmpty'),
					'message' => '顧客コードを入力してください',
				),
			),
		);
	}

いわゆる「複数のバリデーションルールの適用」ってやつですね。’customer_cd(顧客コードに対して)’という項目について、以下の3つのことをチェックしています。

  • 顧客コードが空でないかどうか
  • コードの文字数は10文字以内で収まっているか
  • そのコードには数値のみが入力されているか

ただちょっと面食らったのが、customer_cd array()の第1引数です。

‘notEmpty array()’があって、さらにその下の第1引数として、’rule’ => array(‘notEmpty’)があるところ。何だコレは?

notEmpty’が2回も出てきて、紛らわしい。何か意味があるのでしょうか?

バリデーションチェックを見やすくするための名前(だと思う)

なぜこんな書き方になるのか、いろいろ調べるているうちに、CakePHP2 実践入門 (WEB+DB PRESS plus)のP107で、こんなコードに出会いました。複数のルールを適用するvalidateの例として挙がっています。

class Friend extends AppModel {
		(省略)
		public $validate = array(
			'first_name' => array(
				'rule1' => array(
					'rule' => 'alphaNumeric',
					'require' => true,
					'allowEmpty' => false,
					'message' => '名前は英数字で入力してください',
				),
				'rule2' => array(
					'rule' => array('between', 2, 23),
					'message' => '名前は2文字以上32文字以内で入力してください'
				),
			),
		);
	}

このコードでは、’first_name’という項目について、’rule1’と’rule2’に分けて、複数のルールを適用させています。そして、ここからが私の(勝手な)推測。もし間違ってたらごめんなさい…。

1.’rule1’、’rule2’とかいうコアバリデーションルールや、バリデーションオプションのキーなんてないはず。

2.と言うことはこれらは命名は任意。

3.冒頭で疑問に思った’notEmpty array()’の役割は、チェックの内容を分かりやすくするためだけであって、名前は’hoge’とか’foo’とか何でもでも良い。

CakePHPのバリデーションルールの適用って、独自ルールを決める以外は、かっちり決まっているのかと思ってましたが、そうでないところもあるんですね。

まだこの本をしてちゃんと動かしたわけではないので、アプリケーションが出来上がったら、’hoge’とか’foo’とか突っ込んでみよう。