-->

验证跨越多个领域(Validation spanning multiple fields)

2019-09-21 15:00发布

我试图神交合用的形式,我一直在想,如何实现验证依赖于其他字段的字段的形式。 例如,其具有登记表passwordconfirm_password字段和我想验证password == confirm_password

我可以做的形式已经跑了之后,在处理程序,但是这将意味着失去错误消息。

编辑:忘了提,我主要是利用Yesods合用的形式,但他们似乎是相当接近的消化,函子

Answer 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
    }


文章来源: Validation spanning multiple fields