Я пытаюсь иметь регистрационную форму с такими полями, как email
и emailConfirmation
, или password
и passwordConfirmation
. Проверка email
и password
проста, есть правила, и я написал соответствующие функции.Как я могу проверить поле на основе другого поля?
Остальные два сложнее. Я нашел это question и пытался писать свой код так:
Определение формы, с помощью 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
простую проверку, то она работает как ожидалось. Я что-то упустил?