Иногда веб-сайту/приложению необходимо отображать несколько сообщений пользователю после запроса. К сожалению, средства сообщений Yesod (если я хорошо понимаю документы), по-видимому, ограничены одно сообщение на запрос, при этом каждое новое сообщение перезаписывает предыдущее. Я думал, что могу использовать монаду записи внутри обработчика, чтобы обойти это, отображая список сообщений в HTML, прежде чем сохранять его с помощью 'setMessage', но, поскольку я довольно новичок в Haskell, я понятия не имею, как интегрировать дополнительный монада в сигнатуру типа обработчика (на самом деле, я даже не уверен, осуществимо это или нет). Итак, я хотел бы знать, каков рекомендуемый подход для нескольких сеансовых сообщений в Yesod? Спасибо.
Как установить и получить несколько сообщений в обработчике, чтобы новые сообщения не перезаписывали ранее установленные?
Ответы (1)
Вы правильно прочитали книгу, у вас может быть только одно сообщение. Но вы можете отобразить любой 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, посмотрите здесь.
person
Rodrigo Taboada
schedule
28.10.2013
Спасибо за быстрый ответ @RodrigoTaboada, но я уже понял это. Что меня все еще озадачивает (и мой вопрос не был ясен в этом вопросе), так это то, как установить несколько сообщений сеанса в разных местах кода для данного запроса (например, установить сообщение в getHomeR, затем установить другое внутри defaultLayout и т. д. ).
- person mesr; 30.10.2013