【问题标题】:Validation spanning multiple fields跨多个字段的验证
【发布时间】:2012-08-24 09:47:46
【问题描述】:

我正在尝试了解应用表单,并且一直想知道如何实现一个表单来验证依赖于其他字段的字段。例如具有passwordconfirm_password 字段的注册表单,我想验证password == confirm_password

我可以在表单运行后在处理程序中完成,但这意味着丢失错误消息。

编辑:忘了说,我主要使用 Yesods 应用形式,但它们似乎非常接近消化功能

【问题讨论】:

    标签: haskell yesod digestive-functors


    【解决方案1】:

    您使用的是什么类型的表单系统?您可以使用digestive-functors 轻松完成此操作,这是我的其中一个注册表单的示例:

    registrationForm =
        Registration
          <$> "username" .: text Nothing
          <*> "password" .: passwordConfirmer
      where passwordConfirmer =
              validate fst' $ (,) <$> ("p1" .: text Nothing)
                                  <*> ("p2" .: text Nothing)
            fst' (p1, p2) | p1 == p2  = Success p1
                          | otherwise = Error "Passwords must match"
    

    在这里您可以看到我使用passwordConfirmer 表单字段为我的“密码”字段生成了一个值。该字段使用 2 个文本字段并将它们放入一个元组中,但在验证后它只需要 fst 元素(虽然它可能需要 snd,但我们保证它们是相等的!)。

    我的Registration 类型是:

    data Registration = Registration
        { regUserName :: Text
        , regPassword :: Text
        }
    

    【讨论】:

    • 我正在使用 yesods 申请表,但这也是一个很好的答案
    猜你喜欢
    • 1970-01-01
    • 2014-11-05
    • 2015-12-07
    • 2020-07-06
    • 2023-03-23
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    相关资源
    最近更新 更多