email
やemailConfirmation
、 、 などのフィールドを持つ登録フォームを作成しようとしてい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
て単純な検証を行うと、期待どおりに機能します。ここで何か不足していますか?