我将展示两种不同的方法来实现这一点。对于这两种情况,您都需要将此代码添加到您的模板中,例如在homepage.hamlet:
请注意,访问 URL 时不保证存在任何 id 参数,因此两种方法产生的类型都是 Maybe Text。模板参数的详细解释见the Shakespearean template docs。
方法一:lookupGetParam
执行此操作的最简单方法是使用 lookupGetParam,如下所示:
idValueMaybe <- lookupGetParam "id"
使用yesod init生成的默认设置时,如果在模板中使用idValueMaybe,则idValueMaybe需要在getHomeR和postHomeR中定义。
您的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 检索查询键/值对列表,而不是按名称查找查询参数。这在某些情况下可能是有利的,例如如果您事先不知道所有可能的密钥。使用标准的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")