【问题标题】:Using Prismatic/schema for form validation with Liberator使用 Prismatic/schema 通过 Liberator 进行表单验证
【发布时间】:2014-11-12 17:28:58
【问题描述】:

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

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

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

【问题讨论】:

标签: validation clojure liberator plumatic-schema


【解决方案1】:

Dante on GitHub找到了一些好帮手,但是使用许可不清楚:

(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))

【讨论】:

  • 您的答案中的链接已损坏。
【解决方案2】:

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

我最初在 GitHub 上发布了这样使用 Schema 的建议:

Link here

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-10-24
      • 2016-02-27
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      • 2011-01-30
      • 2018-04-10
      • 1970-01-01
      相关资源
      最近更新 更多