LoginSignup
11
10

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-07-08

チェック構文

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)

以下は後日追記

11
10
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10