3

emailemailConfirmation、 、 などのフィールドを持つ登録フォームを作成しようとしていpasswordますpasswordConfirmation。検証は簡単で、ルールがemailありpassword、それぞれの関数を記述しました。

ただし、他の2つは難しいです。私はこの質問を見つけて、次のようにコードを書いてみました:

Blaze を使用したフォーム定義:

registrationForm :: (View Html) -> Html
registrationForm view = docTypeHtml $ do
  form ! name "registration" ! method "post" ! action "/register" $ do
    fieldset $ do
      label ! for "password" $ (text "Password")
      inputText "password" view
      errorList "password" view

      br

      label ! for "passwordConfirmation" $ (text "Password Confirmation")
      inputText "passwordConfirmation" view
      errorList "passwordConfirmation" view

およびバリデータ:

data Password = Password { password :: Text }

validateForm :: Monad m => Form Html m Password
validateForm =
  Password
    <$> "password" .: validatePassword
  where
    validatePassword =
      validate fst' $ (,) <$> ("password"             .: D.text Nothing)
                          <*> ("passwordConfirmation" .: D.text Nothing)
    fst' (p1, p2) | p1 == p2  = Success p1
                  | otherwise = Error "Passwords must match"

しかし、サーバーを実行するたびに、「パスワードはフィールドではありません」というメッセージが表示されます。検証を削除しpasswordて単純な検証を行うと、期待どおりに機能します。ここで何か不足していますか?

4

1 に答える 1

1

私は消化機能のリポジトリで助けを得ました。ありがとうシマノン

これが最終的なコードです。フィールド名は password/passwordConfirmation ではなく、"password.p1"/"password.p2" になっていることに注意してください。

registrationForm :: (View Html) -> Html
registrationForm view = docTypeHtml $ do
  form ! name "registration" ! method "post" ! action "/register" $ do
    fieldset $ do
      inputText "password.p1" view
      br
      inputText "password.p2" view
      errorList "password" view
data Password = Password { password :: Text }

バリデーターは、新しい名前を除いて同じです:

validateForm :: Monad m => Form Html m Password
validateForm =
  Password
    <$> "password" .: validatePassword
  where
    validatePassword =
      validate fst' $ (,) <$> ("p1" .: D.text Nothing)
                          <*> ("p2" .: D.text Nothing)
    fst' (p1, p2) | p1 == p2  = Success p1
                  | otherwise = Error "Passwords must match"
于 2016-04-21T18:41:56.700 に答える