gpt4 book ai didi

haskell - 在 Yesod 中查找查询参数

转载 作者:行者123 更新时间:2023-12-03 15:09:46 24 4
gpt4 key购买 nike

我刚刚使用 yesod init 初始化了一个 Yesod 项目(无数据库) .

我的 HomeR GET 处理程序如下所示:

getHomeR :: Handler Html
getHomeR = do
(formWidget, formEnctype) <- generateFormPost sampleForm
let submission = Nothing :: Maybe (FileInfo, Text)
handlerName = "getHomeR" :: Text
defaultLayout $ do
aDomId <- newIdent
setTitle "Welcome To Yesod!"
$(widgetFile "homepage")

使用 yesod devel 时,我可以访问默认主页 http://localhost:3000/ .

如何修改上面列出的处理程序以检索(并显示)像 id=abc123 这样的 HTTP GET 查询参数访问此 URL 时:
http://localhost:3000/?id=abc123
注:这个问题是问答式回答的,因此故意不显示研究工作!

最佳答案

我将展示两种不同的方法来实现这一点。对于这两种情况,您都需要将此代码添加到您的模板中,例如在 homepage.hamlet :

请注意,不保证有任何 id访问 URL 时存在参数,因此两种方法产生的类型都是 Maybe Text .见 the Shakespearean template docs有关模板参数的详细说明。

方法一:lookupGetParam

最简单的方法是使用 lookupGetParam 像这样:

idValueMaybe <- lookupGetParam "id"

使用 yesod init 生成的默认设置时, idValueMaybe需要在 getHomeR 中定义和 postHomeR如果 idValueMaybe在模板中使用。

您的 HomeR GET 处理程序可能如下所示:

getHomeR :: Handler Html
getHomeR = do
idValueMaybe <- lookupGetParam "id"
(formWidget, formEnctype) <- generateFormPost sampleForm
let submission = Nothing :: Maybe (FileInfo, Text)
handlerName = "getHomeR" :: Text
defaultLayout $ do
aDomId <- newIdent
setTitle "Welcome To Yesod!"
$(widgetFile "homepage")

方法二:reqGetParams

除了按名称查找查询参数外,您还可以使用 reqGetParams 检索查询键/值对列表。 .这在某些情况下可能是有利的,例如如果您事先不知道所有可能的 key 。使用标准 lookup 功能,您可以轻松地在该列表中查找某个键。

您的代码的相关部分可能如下所示:
getParameters <- reqGetParams <$> getRequest
let idValueMaybe = lookup "id" getParameters :: Maybe Text

您的 getHomeR可能看起来像这样:
getHomeR :: Handler Html
getHomeR = do
getParameters <- reqGetParams <$> getRequest
let idValueMaybe = lookup "id" getParameters :: Maybe Text
(formWidget, formEnctype) <- generateFormPost sampleForm
let submission = Nothing :: Maybe (FileInfo, Text)
handlerName = "getHomeR" :: Text
defaultLayout $ do
aDomId <- newIdent
setTitle "Welcome To Yesod!"
$(widgetFile "homepage")

关于haskell - 在 Yesod 中查找查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25253089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com