2

我正在尝试学习 Yesod 1.2,但我不知道如何访问存储在 YesodAuth 实例中的 IO 和信息。

例如,我不知道如何在 Yesod 1.2 中调用 getCurrentTime。在 Yesod 1.1 中,您可以通过调用“aformM (liftIO getCurrentTime)”来获取表单中的当前时间

同样,对于 Yesod 1.2,我无法弄清楚如何调用“requireAuthId”。

使用 Yesod 1.1,您可以通过以下代码段中以 <*> aformM 开头的两行代码获得这两位数据:

commentForm :: EntryId -> Form Comment
commentForm entryId = renderDivs $ Comment
    <$> pure entryId
    <*> aformM (liftIO getCurrentTime)
    <*> aformM requireAuthId
    <*> areq textField (fieldSettingsLabel MsgCommentName) Nothing
    <*> areq textareaField (fieldSettingsLabel MsgCommentText) Nothing

我目前求助于在调用“commentForm”的代码中查询这些,但这似乎很愚蠢,因为现在我必须多次获取时间和用户 ID。

commentForm :: UTCTime -> UserId -> EntryId -> Form Comment
commentForm theTime userId entryId = renderDivs $ Comment
    <$> pure entryId
    <*> pure theTime
    <*> pure userId
    <*> areq textField (fieldSettingsLabel MsgCommentName) Nothing
    <*> areq textareaField (fieldSettingsLabel MsgCommentText) Nothing

帮助!我已经看过文档很多次了,我就是无法理解它。

4

1 回答 1

4

有趣的是,我在几个小时前更新了博客示例,以包含这种正确的方法,并解释了为什么它是必要的。精简版:

lift (liftIO getCurrentTime)
于 2013-07-19T16:24:20.487 回答