CakePHPまとめ - Validation(バリデ−ション)

Validation(バリデ−ション)

  • バリデーションの設定はModel内の$validate配列を定義して行う。
  • save()の実行時に自動的にバリデートのチェックを行う

バリデーション定義例
<?php
class User extends AppModel {
    var $name = 'User';
    var $validate = array('フィールド名' => 'ルール名');
}
?>

単純なバリデーション

'フールド名' => 'ルール名'の連想配列でOK
var $validate = array(
	'login' => 'alphaNumeric',
	'email' => 'email',
	'born' => 'date'
);

複数のバリデーション

1つの項目に対して複数のバリエーションルールを適用する場合は
'フールド名' => array(
        'rule' => 'ルール',
        'message' => 'エラー時に表示するメッセージ'
    )

var $validate = array(
	'login' => array(
		'alphanumeric' => array(
			'rule' => 'alphaNumeric',
			'required' => true,
			'message' => 'Alphabets and numbers only'
		),
		'between' => array(
			'rule' => array('between', 5, 15),
			'message' => 'Between 5 to 15 characters'
		)
	),
	'password' => array(
		'rule' => array('minLength', '8'),
		'message' => 'Mimimum 8 characters long'
	),
	'email' => 'email',
	'born' => array(
		'rule' => 'date',
		'message' => 'Enter a valid date',
		'allowEmpty' => true
	)
);

バリデーションルール一覧

ルール名にはCakePHPにてあらかじめ定義されている名称を入力する。
notEmpty空でないか
alphaNumeric半角のアルファベットか数字のみ許可
betweenデータの長さが指定された範囲内かどうか。最小値と最大値は必須。「<」ではなく「<=」を使用。日本語は1文字=2とカウント
blankデータが空かホワイトスペースのみで構成されているかどうか。半角スペースとタブ、復帰文字(carriage return)および改行文字(newline)を含む
ccクレジットカードの番号として適切かどうか。array('cc', タイプ, 真偽値, 正規表現)
comparison数字の比較。「is greater (〜より大きい)」「is less (〜より小さい)」「greater or equal (〜以上)」「less or equal (〜以下)」「equal to (〜と等しい)」「not equal (〜と等しくない)」
custom独自のバリデーションルールを正規表現で設定する
date日付として適切かどうか
time
boolean
decimal小数かどうか
emailEメールアドレスとして適切かどうか
equalToデータと第一引数が、値と型の両方で同じかどうか
extension指定したファイル名の拡張子が指定したものにマッチするか。拡張子は配列で指定可能。
file保留
ipIPv4形式かどうか
minLengthデータの長さが指定値より小さくないか
maxLengthデータの長さが指定値より大きくないか
money値が金額として適当か。
multiple複数選択する入力のバリデーションに使用します。パラメータとして「in」「max」そして「min」をサポートします。
numeric数字もしくは数値形式かどうか
phoneアメリカの電話番号の形式であるか
postal郵便番号かどうか。対応している国は、アメリカ(us)、カナダ(ca)、イギリス(uk)、イタリア(it)、ドイツ(de)、ベルギー(be)
range指定した範囲にデータがおさまるかどうか(データ長ではなく数値として)
ssn社会保障番号であるかどうか。対応している国は、アメリカ(us)、デンマーク(dk)、オランダ(dk)
url正しいURLの形式であるかどうか。http(s)、ftp(s)、file、news、gopher のプロトコルに対応
inListデータが指定されたリストに含まれているかどうか
userDefined
isUnique与えられた値が他の行で出現せず、ユニークであるかどうか

エラーメッセージの表示

Viewでのエラーメッセージの表示方法は
$form->error('フォーム名.フォーム項目名')
を使用する

Controllerでのエラーの有無の判別

$this->モデル名->validates() がtrueかどうかで判別する

if ($this->モデル名->validates()) {
    //バリデーションにエラーがなければリダイレクト処理
    $this->redirect('.');
}