7

適用可能なフォームを作成しようとしていますが、他のフィールドに依存するフィールドを検証するフォームを実装する方法を考えていました。たとえばpasswordconfirm_passwordフィールドがある登録フォームで、それを検証したいと思いpassword == confirm_passwordます。

フォームが実行された後、ハンドラーで実行できますが、それはエラーメッセージが失われることを意味します。

編集:言及するのを忘れました、私は主にYesodsの適用可能なフォームを使用していますが、それらは消化機能に非常に近いようです

4

1 に答える 1

7

どのタイプのフォーム システムを使用していますか? これは で簡単に行うことができます。これdigestive-functorsが私の登録フォームの 1 つの例です。

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 に答える