CakePHPのバリデーションについてメモ書きです。public $validateについて、何やら見慣れない記法が出てきたので、確認しておきましょう。
‘notEmpty array()’ってなに?
上記のP148にあるCustomer.phpで使用されている、バリデーションチェックに関するコードを引用すると、こんな感じになっています。
[php]
class Customer extends AppModel {
(省略)
public $validate = array(
‘customer_cd’ => array(
‘notEmpty’ => array(
‘rule’ => array(‘notEmpty’),
‘message’ => ‘顧客コードを入力してください’,
),
),
);
}
[/php]
いわゆる「複数のバリデーションルールの適用」ってやつですね。’customer_cd(顧客コードに対して)’という項目について、以下の3つのことをチェックしています。
- 顧客コードが空でないかどうか
- コードの文字数は10文字以内で収まっているか
- そのコードには数値のみが入力されているか
ただちょっと面食らったのが、customer_cd array()の第1引数です。
‘notEmpty array()’があって、さらにその下の第1引数として、’rule’ => array(‘notEmpty’)があるところ。何だコレは?
‘notEmpty’が2回も出てきて、紛らわしい。何か意味があるのでしょうか?
バリデーションチェックを見やすくするための名前(だと思う)
なぜこんな書き方になるのか、いろいろ調べるているうちに、CakePHP2 実践入門 (WEB+DB PRESS plus)のP107で、こんなコードに出会いました。複数のルールを適用するvalidateの例として挙がっています。
[php]
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文字以内で入力してください’
),
),
);
}
[/php]
このコードでは、’first_name’という項目について、’rule1’と’rule2’に分けて、複数のルールを適用させています。そして、ここからが私の(勝手な)推測。もし間違ってたらごめんなさい…。
1.’rule1’、’rule2’とかいうコアバリデーションルールや、バリデーションオプションのキーなんてないはず。
↓
2.と言うことはこれらは命名は任意。
↓
3.冒頭で疑問に思った’notEmpty array()’の役割は、チェックの内容を分かりやすくするためだけであって、名前は’hoge’とか’foo’とか何でもでも良い。
CakePHPのバリデーションルールの適用って、独自ルールを決める以外は、かっちり決まっているのかと思ってましたが、そうでないところもあるんですね。
まだこの本をしてちゃんと動かしたわけではないので、アプリケーションが出来上がったら、’hoge’とか’foo’とか突っ込んでみよう。