バリデーション


Slim3は以下のような簡単なバリデーションフレームワークを提供します:
Validators v = new Validators(request);
v.add("arg1", v.required(), v.integerType());
v.add("arg2", v.required(), v.integerType(), v.longRange(3, 5));
if (v.validate()) {
    //OK
} else {
    //NG
    Errors errors = v.getErrors();
    System.out.println(errors.get("arg1"));
    System.out.println(errors.get("arg2"));
}


同じリクエスト属性に対して複数のバリデータを追加した場合、属性値が不正だと最初に判断したバリデータのメッセージが使用されます。

エラーメッセージは <project>/src/application[_locale].properties に以下のように設定されています。
validator.required={0} is required.
validator.byteType={0} must be a byte.
validator.shortType={0} must be a short.
validator.integerType={0} must be an integer.
validator.longType={0} must be a long.
validator.floatType={0} must be a float.
validator.doubleType={0} must be a double.
validator.numberType={0} is not a number({1}).
validator.dateType={0} is not a date({1}).
validator.minlength={0} can not be less than {1} characters.
validator.maxlength={0} can not be greater than {1} characters.
validator.range={0} is not in the {1} to {2} range.
validator.regexp={0} is invalid.

{0} には属性名が入ります。ロケールによって属性名を変更したい場合は、label.<attribute name> というエントリを <project>/src/application[_locale].properties に定義して下さい。
label.arg1=xxx
label.arg2=yyy


HOT リローディングにより、application[_locale].properties を変更しても、Webアプリケーションの再起動なしで変更を確認できます。

もし属性がモデルに保存されている場合、モデルのメタデータ によってタイプセーフに属性名を指定することができます。
Validators v = new Validators(request);
BlogMeta meta = BlogMeta.get();
v.add(meta.title, v.required());
v.add(meta.content, v.required());

See Validators and demo.
Comments