バリデーションを行うのは簡単です。バリデータをセットアップし、validateメソッド を実行するだけです。バリデーションメソッドを登録するには、バリデータの addメソッド を使用します。
$validator = new Sabel_Validator();
$validator->add("name", "required"); // nameは必須
validateメソッド には値の配列を渡します。戻り値はエラーが1つでもあれば false となり、エラーメッセージは getErrors() で取得できます。
$validator = new Sabel_Validator();
$validator->add("name", "required");
if ($validator->validate(array("name" => null))) {
} else {
var_dump($validator->getErrors()); // "name is required."
}
日本語環境でSabelをセットアップ(sabel -l ja)している場合、libの下に Validatorクラス があるのでそれを使用してください。メッセージが日本語で出力されます。
$validator = new Validator();
$validator->add("name", "required");
if ($validator->validate(array("name" => null))) {
} else {
var_dump($validator->getErrors()); // "nameは必須です"
}
setDisplayName() でエラーメッセージに使用する出力用名称を設定することができます。なお、setDisplayNames() はこれを配列で複数指定することができます。キーを入力名、値を出力用名称としてください。
$validator = new Validator();
$validator->setDisplayName("name", "名前");
$validator = new Validator();
$validator->setDisplayNames(array(
"name" => "名前",
...
));
addメソッド の入力名の部分にコロンを使用し、出力用名称を設定することもできます。
$validator = new Validator();
$validator->add("name:名前", "required");
if ($validator->validate(array("name" => null))) {
} else {
var_dump($validator->getErrors()); // "名前は必須です"
}
下記は標準で用意されているバリデーションメソッドの一覧です。
- required - 必須
- integer - 整数
- numeric - 数値
- naturalNumber - 自然数
- alnum - 半角英数字
- strlen(maxlen) - バイト数
- strwidth(maxwidth) - 文字幅(全角2, 半角1)
- max(max) - 最大値
- min(min) - 最小値
- boolean - 真偽値("0", "1", true, false, 1, 0)
- date - 日付
- datetime - 日付時刻
- image(maxsize, formats) - 画像サイズ、形式
- same - 値が同じ
- nnumber - naturalNumberのエイリアス
例えば年齢のバリデーション設定は下記のようになるでしょう。
$validator = new Validator();
$validator->setDisplayName("age", "年齢");
$validator->add("age", "required") // 必須
->add("age", "nnumber") // 自然数
->add("age", "min(18)") // 18以上
->add("age", "max(120)"); // 120以下
imageによるバリデーションでは、第1引数に最大画像サイズ、第2引数に受け入れ可能な画像形式を指定します。サイズは "500K" や "3M" のような形式が使用でき、デフォルトは "300K" となっています。また、受け入れ可能な画像形式のデフォルトは jpeg, gif, png の3種類となっています。
// 最大1MBで、jpeg・gifのみ許可
$validator->add("image", "image('1M', array('jpeg', 'gif'))");
sameによるバリデーションは少々特殊で、複数の入力を与える必要があります。このバリデーションは主にパスワードの再入力などで必要になるような、複数の入力の値の一致チェックに使用されます。
sameバリデーションの登録時は、一致しなければならない入力キーをカンマ区切りで指定します。
$validator = new Validator();
$validator->setDisplayNames(array(
"password" => "パスワード",
"password2" => "パスワード再入力",
));
$validator->add("password,password2", "same");
if ($validator->validate(array("password" => "a", "password2" => "b"))) {
} else {
dump($validator->getErrors()); // "パスワードとパスワード再入力が一致しません"
}
バリデーションメソッドの削除
入力に対するバリデーションを削除するには、delete()メソッドを使用してください。
$validator = new Validator();
$validator->add("age", "required")->add("age", "nnumber");
$validator->delete("age"); // "age" に対するバリデーションメソッドを全て削除
指定したバリデーションメソッドだけを削除することもできます。
$validator = new Validator();
$validator->add("age", "required")->add("age", "nnumber");
$validator->delete("age", "nnumber"); // 自然数チェックだけ外す
引数付きのバリデーションメソッドも同様に削除することができます。
$validator = new Validator();
$validator->add("age", "required")->add("age", "nnumber")->add("age", "min(18)");
$validator->delete("age", "min"); // 最小値(18)チェックだけ外す
関連項目