Edited at

CakePHP で項目のチェックを行う。

More than 5 years have passed since last update.


チェック構文

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')

email
メールアドレス形式
'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)

以下は後日追記