如何设置和检索处理程序中的多个消息,而没有新消息覆盖以前设置的消息?

时间:2013-10-27 22:14:48

标签: session haskell yesod

有时,网站/应用需要在请求后向用户显示多条消息。不幸的是,Yesod的消息工具(如果我理解为the docs)似乎仅限于每个请求一条消息,每条新消息都会覆盖前一条消息。我以为我可以在处理程序中使用一个编写器monad来解决这个问题,在使用'setMessage'保存它之前将消息列表呈现为HTML,但对Haskell来说还是比较新的,我不知道如何集成一个额外的monad到处理程序的类型签名(事实上,我甚至不确定这是否可行)。那么,我想知道Yesod中多个会话消息的推荐方法是什么?感谢。

1 个答案:

答案 0 :(得分:2)

您正确阅读了本书,您只能有一条消息。但是您可以在该消息中显示任何HTML。您可以使用blaze-html生成包含所需HTML的邮件。

这段代码就是这样:

import Text.Blaze.Html5

-- Create a message.
message :: Html
message = do
    p "Welcome to my site"
    p "Your account was created successfully"       

-- Use the message in your handler.
getHomeR :: Handler Html
getHomeR = defaultLayout $ do
    setTitle "Yesod Web Service Homepage"    
    setMessage $ message
    $(widgetFile "home")

对于您主页的用户,您将有两条消息。要详细了解blaze-html,请查看here

相关问题