バリデーション | Form & Validation

バリデーションを行うのは簡単です。バリデータをセットアップし、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)チェックだけ外す

関連項目