Ich versuche, ein Registrierungsformular mit Feldern wie email
und emailConfirmation
oder password
und passwordConfirmation
zu haben. Validieren email
und password
ist einfach, es gibt Regeln und ich habe die entsprechenden Funktionen geschrieben.Wie kann ich ein Feld basierend auf einem anderen Feld validieren?
Die anderen beiden sind jedoch schwieriger. Ich fand dieses question und versuchte, meinen Code wie folgt schreiben:
Die Formulardefinition mit 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
und der Validator:
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"
Aber immer, wenn ich den Server laufen bekomme ich ein Nachricht sagt "Passwort ist kein Feld". Wenn ich die Validierung entferne und password
eine einfache Validierung gebe, dann funktioniert es wie erwartet. Fehle ich hier etwas?