3

棱柱形/模式是否适合表单验证?我以前从未设计过表单验证库,但我想它会输出类似这样的东西,而不是抛出异常s/validate

{::errors {:name [{:missing "Required field."}
                  {:length "Must be at least 3 characters."}]
           :email [{:email "Must be a valid email address"}]}}

我希望有人将它与 Compojure 和 Liberator 一起使用,但我在网上找不到任何东西。

4

3 回答 3

0

根据您对验证失败所需的错误图的描述,看起来Validateur适合。从他们的入门页面引用:

Validateur 是一个受 Ruby 的 ActiveModel 启发的验证库。Validateur 是函数式的:验证器是函数,验证集是高阶函数,验证结果作为值返回。

围绕这个小核心,Validateur 可以使用您可能需要的任何自定义验证器进行扩展:它就像定义符合直接合同的 Clojure 函数一样简单。

于 2015-02-27T09:18:22.060 回答
0

在 GitHub 上的 Dante 中找到了一些很棒的帮手,但是使用许可不清楚:

(ns dante.tools.schemas
  (:require [dante.tools.namespaces :refer [export]]
            [schema.core :as s]
            [schema.coerce :as coerce]
            [schema.utils :refer [validation-error-explain]])
  (:import [schema.utils NamedError ValidationError]))

(defn explain [errors]
  (cond
   (map? errors)
   (->> errors
        (map (fn [[k v]]
               [k (explain v)]))
        (into {}))

   (or (seq? errors)
       (coll? errors))
   (map explain errors)

   (instance? NamedError errors)
   [(.name errors)
    (explain (.error errors))]

   (instance? ValidationError errors)
   (str (validation-error-explain errors))

   :else
   (str errors)))

(defn- coercercions [schema]
  (or
   (coerce/+string-coercions+ schema)
   (coerce/set-matcher schema)))

(defn validate [schema value]
  ((coerce/coercer schema coercercions) value))
于 2014-09-18T11:50:54.577 回答
0

一段时间以来,我一直在使用 Schema 进行共享表单验证 (ClojureScript) 和服务器端 (Clojure),结果非常好。

我最初在 GitHub 上发布了以这种方式使用 Schema 的建议:

链接在这里

如果您想要更多示例,请告诉我。

于 2014-09-19T10:25:31.210 回答