7

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

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

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

4

1 回答 1

7

您使用的是什么类型的表单系统?您可以使用 轻松做到这一点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
    }
于 2012-08-24T10:37:59.813 回答