Get It:
Download
Change Log
Learn It:
Install
Tutorial
API Doc
Discuss It:
Mailing List
Follow It:
Code

Tutorial Part 8. バリデーション

バリデーション・タイプ

値のバリデーション

validation-errors

文法:

(validation-errors label value validators)

validation-errorsはVALUEをVALIDATORSで検証し、エラーがあればそれを返します。LABELはエラーメッセージの主語として利用されます。

例:

(validation-errors "label" nil '(:required t :length 3))
;=> ("label can't be empty") 

(validation-errors "label" "12345" '(:required t :length 3))
;=> ("label is too long (maximum is 3 characters)") 

with-validations

文法:

(with-validations validations error-handler body)

with-validationsはVALIDATIONSのバリデーションを実行します。もしエラーがあった場合はERROR-HANDLERを実行し、それ以外の場合はBODYを実行します。ERROR-HANDLERはひとつの引数をとる手続きである必要があり、渡される引数はリストのエラーメッセージです。

例:

(with-validations (("1" "v" '(:required t))
                   ("2" nil '(:required t)))
  (lambda (e) e)
  "ok") ;=> ("2 can't be empty")

(with-validations (("1" "v" '(:required t))
                   ("2" "v" '(:required t)))
  (lambda (e) e)
  "ok") ;=> "ok"

slot-validation-errors

文法:

(slot-validation-errors class slot &optional instance)

slot-validation-errorsは永続化クラスCLASSのインスタンスのSLOT値を編集する為にpostパラメーターを検証し、エラーが発生した場合はエラーメッセージを返します。INSTANCEは既存のインスタンスを更新する場合のみ必要とされる、永続化クラスCLASSのインスタンスです。

例:

(defpclass blog ()
  ((body :required t)))

(with-post-parameters '(("blog_body" . nil))
  (slot-validation-errors 'blog (get-slot 'blog 'body)))

;=> ("Body can't be empty") 

class-validation-errors

文法:

(class-validation-errors class &optional instance)

class-validation-errorsは永続化クラスCLASSのインスタンスを作成/更新する為にpostパラメーターを検証し、エラーが発生した場合はエラーメッセージを返します。INSTANCEは既存のインスタンスを更新する場合のみ必要とされる、永続化クラスCLASSのインスタンスです。

例:

(defpclass blog ()
  ((title :required t)
   (body  :required t)))

(with-post-parameters '(("blog_title" . nil)
                        ("blog_body"  . nil))
  (class-validation-errors 'blog))

;=> ("Title can't be empty" "Body can't be empty") 

エラーメッセージ

バリデーションエラーメッセージは*validation-error-messages*の値を変更するか、error-msg関数を再定義することにより、変更することが出来ます。