CakePHP1.3.2にして独自バリデーションルールを初めて使う愚か者なのだけれど、ハマった。
マニュアルを見るとこんな感じになってる。
<?php
class User extends AppModel {
var $name = 'User';
var $validate = array(
'promotion_code' => array(
'rule' => array('limitDuplicates', 25),
'message' => 'この販促コードは使い切りました。'
)
);
function limitDuplicates($data, $limit){
$existing_promo_count = $this->find( 'count', array('conditions' => $data, 'recursive' => -1) );
return $existing_promo_count < $limit;
}
}
?>
スポンサードリンク
早速コピペ。しかし動作しない。あらら??
いくつか検索するもヤリ手さんばかりで、同じ機能は使えどこのようなやり方はヒットしない。(皆様、バリデートだけ他にまとめておくやり方なので)
じゃぁいいや、 return false これでどーよ?と思ったらうまく動作した。あら?return $existing_promo_count < $limit; が真偽値を返さないの?ん?よくわかんないけど真偽値を返せばいいらしいのでそういうことで蓋をしてしまおう~w
ってことで、蓋をした。
var $validate = array(
'name' => array(
'notempty' => array(
'rule' => array('notEmpty'),
'message' => '必須項目です',
),
'rule1' => array(
'rule' => array('limitDuplicates', 8),
'message' => 'これ以上登録できません',
),
),
);
function limitDuplicates($data, $limit){
$count = $this->find( 'count', array('conditions' => $data, 'recursive' => -1) );
return ($count < $limit) ? false : true;
}
※CakePHP1.3.2でテスト。CakePHP1.2と1.3のどちらのマニュアルも同じコードだった。うーん?
参考文献
- 独自のバリデーションルール :: データのバリデーション(Data Validation) :: CakePHPによる作業の定石 :: マニュアル :: 1.3コレクション :: The Cookbook :
http://book.cakephp.org/ja/view/1179/Custom-Validation-Rules

コメント