チェック構文
class Model extends AppModel {
$validate = array( /* チェック:後述 */ );
}
class ModelController extends AppController {
public function create () {
$data = $this->request->data;
// チェックのみを行う。
$this->Model->set($data);
if (!$this->Model->validates()) { echo "NG \n"; }
// 登録と同時にチェックを行う。
$this->Model->create();
if (!$this->Model->save ($data)) { echo "NG \n"; }
// 規定外のテンプレートを呼ぶ ( ctp は不要 )
$this->render ( "edit" /*, layout = default */);
}
public function edit($id=0) {
$data = $this->request->data;
// チェックのみを行う。
$this->Model->set($data);
if (!$this->Model->validates()) { echo "NG \n"; }
// 登録と同時にチェックを行う。
$this->Model->set($data);
if (!$this->Model->save ($data)) { echo "NG \n"; }
}
検証ルール
Rule | Check | Sample |
---|---|---|
notEmpty | 必須 | 'column' => 'notEmpty' |
blank | 未入力チェック | 'column' => 'blank' |
boolean | 論理値チェック ( 0 or 1 ) | 'column' => 'boolean' |
custom | 正規表現 | 'column' => array('custom', '/0[0-9]0[-]?[0-9]{4}[-]?[0-9]{4}/ig') |
equalTo | 一致チェック | 'column' => 'equalTo' |
inList | リストチェック | 'column' => array('inList', array(1,2,3)) |
isUnique | ユニークチェック(SQL発行) | 'column' => 'isUnique' |
形式チェック
Rule | Check | Sample |
---|---|---|
ip | IP形式 | 'column' => 'ip' |
ip | IP形式(v4) | 'column' => array('ip', 'IPv4') /* 0.0.0.0 */ |
ip | IP形式(v6) | 'column' => array('ip', 'IPv6') /* 0::0.0.0 */ |
uuid | RFC-4122 (UUID形式であるかどうか) | |
cc | クレジットカードチェック | 'column' => array('cc') |
cc | クレジットカードチェック(アメリカンエクスプレス) | 'column' => array('cc', 'amex') |
cc | クレジットカードチェック(ダイナースクラブ) | 'column' => array('cc', 'diners') |
cc | クレジットカードチェック(JCB) | 'column' => array('cc', 'jcb') |
cc | クレジットカードチェック(VISA) | 'column' => array('cc', 'visa') |
cc | クレジットカードチェック(VISA + JCB) | 'column' => array('cc', array('jcb', 'visa') |
メールアドレス形式 | 'column' => 'email' |
日付チェック
Rule | Check | Sample |
---|---|---|
date | 日付 | 'column'=>'date' |
date | 日付 (yyyy-mm-dd or yy-mm-dd ) | 'column'=>array('date', 'ymd') |
date | 日付 (yyyy-mm or yy-mm ) | 'column'=>array('date', 'ym') |
datetime | 日付 | 'column'=>'datetime' |
datetime | 日付 (yyyy-mm-dd or yy-mm-dd ) | 'column'=>array('datetime', 'ymd') |
datetime | 日付 (yyyy-mm or yy-mm ) | 'column'=>array('datetime', 'ym') |
ファイル関連(BLOB/CLOB)
Rule | Check | Sample |
---|---|---|
fileSize | ファイルサイズチェック | 'column' => array('fileSize', '<=', '2MB') |
mimeType | MIMEタイプチェック | 'column' => array('mimeType', 'text/html') |
mimeType | MIMEタイプチェック (部分一致) | 'column' => array('mimeType', '#text/.+#') |
mimeType | MIMEタイプチェック(複数) | 'column' => array('mimeType', array('text/html','text/css')) |
extension | 拡張子チェック | 'column' => array('extension', array('jpg', 'gif', 'png') /* 参考 image */ |
文字列
Rule | Check | Sample |
---|---|---|
maxLength | 最大文字長 | 'column' => array('maxLength', 20) |
minLength | 最小文字長 | 'column' => array('minLength', 20) |
alphaNumeric | 英数チェック /0-9a-f/i
|
'column' => 'alphaNumeric' |
数値
Rule | Check | Sample |
---|---|---|
numeric | 数値 | 'column' => 'numeric' |
naturalNumber | 数値(自然数) | 'column' => 'naturalNumber' |
decimal | 数値(不動小数点数) | 'column'=>'decimal' |
decimal(10) | 数値(不動小数点数) | 'column'=>array |
decimal(10,2) | 数値(不動小数点数) | 'column'=>array('decimal',10,2) |
between | レンジチェック | 'column' => array('between',/min/10,/max/20) |
range | レンジチェック | 'column' => array('range',/min/10,/max/20) |
comparison | 数値比較(未満) | 'column' => array('comparison', 'is less', /検証値/25) |
comparison | 数値比較(以下) | 'column' => array('comparison', 'less or equal', /検証値/25) |
comparison | 数値比較(一致) | 'column' => array('comparison', 'equal', /検証値/25) |
comparison | 数値比較(不一致) | 'column' => array('comparison', 'not equal', /検証値/25) |
comparison | 数値比較(以上) | 'column' => array('comparison', 'greater or equal', /検証値/25) |
comparison | 数値比較(超過) | 'column' => array('comparison', 'is greater', /検証値/25) |
以下は後日追記