как использовать монадические формы?

Я реализую форму «свяжитесь со мной», которая отправит электронное письмо при отправке. Мне нужна была эта форма для создания пользовательского HTML, поэтому в итоге я использовал монадические формы. Проблема в том, что я не знаю, как использовать монадическую форму.

код ниже. Для краткости я опустил часть, которая отправляет электронную почту. проблема в том, что моя форма никогда не проверяется правильно. результат формы никогда не будет FormSuccess в моей функции postContactR.

Кажется, я неправильно инициализирую форму, когда вызываю runFormPost внутри postContactR. Я всегда передаю Nothing вместо фактического ContactData в contactForm и не знаю, как составить ContactData из запроса. Правильно ли я понимаю проблему? Я пытаюсь работать с плохо документированными функциями. :)

любая помощь?

РЕДАКТИРОВАТЬ: что выглядит странно, так это то, что ошибки проверки отображаются в форме, если я отправляю недопустимую форму, поэтому данные запроса в какой-то момент считываются. что не работает, так это то, что когда нет ошибок, я не перенаправляюсь на RootR

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
module Handler.Contact where
import Control.Applicative ((<$>), (<*>)) import Data.Text (Text) import Foundation import Network.Mail.Mime
data ContactData = ContactData { contactName :: Text , contactEmail :: Text , contactMessage :: Textarea } deriving Show
contactForm d = \html -> do (r1, v1) <- mreq textField "Your name:" (contactName <$> d) (r2, v2) <- mreq emailField "Your e-mail:" (contactEmail <$> d) (r3, v3) <- mreq textareaField "Message:" (contactMessage <$> d) let views = [v1, v2, v3] return (ContactData <$> r1 <*> r2 <*> r3, $(widgetFile "contact-form"))
getContactR :: Handler RepHtml getContactR = do ((_, form), _) <- runFormPost (contactForm Nothing) defaultLayout $ do setTitle "contact" addWidget $(widgetFile "contact")
postContactR :: Handler RepHtml postContactR = do ((r, form), _) <- runFormPost (contactForm Nothing) case r of FormSuccess d -> do sendEmail d setMessage "Message sent" redirect RedirectTemporary RootR _ -> getContactR


person akonsu    schedule 21.09.2011    source источник


Ответы (1)


Вы включаете значение html в contact-form.hamlet? Это одноразовое значение. Вы получите лучшую отладочную информацию, если напечатаете значение r (в postContactR).

У меня есть в моем списке TODO, чтобы добавить пример монадической формы, он должен быть готов в ближайшее время.

person Michael Snoyman    schedule 22.09.2011