(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 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 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 &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関数を再定義することにより、変更することが出来ます。